需要长期运营的项目,千万别用 rails - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lianghudou
V2EX    Ruby on Rails

需要长期运营的项目,千万别用 rails

  •  
  •   lianghudou 2016-07-02 12:26:09 +08:00 14412 次点击
    这是一个创建于 3388 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基本上 3 年以后,换服务器的时候项目就等于盼了死刑。

    我 13 年做了个项目,用的当时最新的 rails3.2 。现在转服务器,不知道那个 gem 依赖了 eventmachine ,并且必须是 1.0.0 版的,为了兼容这个 1.0.0 版,不得不用 ruby 2.0.0 ,但是,在这个低版本的 ruby 上, rake 已经罢工了,必须得 2.2.2 以上。

    其实我用的 gem 不算多, Gemfile 里满打满算也就 10 个左右

    linux环境的跨度也不算大,仅仅从ubuntu12到ubuntu14,难以想象到ubuntu18、ubuntu20,这个项目还有没有继续运行的可能。

    如果你的 web 项目打算让它稳定运行 10 年以上, java 和 php 仍是最佳选择,那些新技术拿来玩玩就行了,别用生产环境。
    第 1 条附言    2016-07-02 14:42:01 +08:00
    算了,项目用 php 重写了
    83 条回复    2023-02-23 09:48:32 +08:00
    dishonest
        1
    dishonest  
       2016-07-02 12:37:28 +08:00
    请用 docker 之类。 rails 部署时麻烦了点,但同理 nodejs , python 也会遇到同样问题。
    dorentus
        2
    dorentus  
       2016-07-02 12:52:54 +08:00 via iPhone   2
    Github 表示不服。
    shyling
        3
    shyling  
       2016-07-02 12:54:50 +08:00 via iPad
    所以什么都不要升级就好了。。。
    blacklee
        4
    blacklee  
       2016-07-02 12:54:51 +08:00
    线上已经运营 2 年+,版本为 Ruby: 2.1.1, Rails: 4.1 。
    并没有什么问题。
    blacklee
        5
    blacklee  
       2016-07-02 12:55:37 +08:00   1
    在 Gemfile.lock 里查看依赖关系
    blacklee
        6
    blacklee  
       2016-07-02 12:56:42 +08:00
    呃,其实吧,你的问题可能在线上环境不要用 Ubuntu 。
    抱歉一下子添加了 3 个评论,应该合并成一个比较好。
    jerray
        7
    jerray  
       2016-07-02 12:58:23 +08:00
    长期运营的项目,为什么不随着语言和框架的更新进行适当升级?
    lianghudou
        8
    lianghudou  
    OP
       2016-07-02 12:59:07 +08:00
    @blacklee 为了个 rails 放弃 ubuntu ,呵呵~
    lianghudou
        9
    lianghudou  
    OP
       2016-07-02 13:00:14 +08:00   1
    @jerray rails 跟 php 和 java 不一样,每次升级 api 都被改的面目全非,项目没法随着框架升级。
    matsuijurina
        10
    matsuijurina  
       2016-07-02 13:02:07 +08:00 via Android
    现在有 docker 了,这些都不是问题了。要说依赖的兼容问题, php 用了 composer 之后也一样。
    mdluo
        11
    mdluo  
       2016-07-02 13:02:38 +08:00 via iPhone
    项目的依赖本来就需要不断及时升级,及时修复

    要么就所有依赖全部版本固化

    你所说的 php/java 稳定是因为它们的依赖管理器( Packagist / Composer / Maven / Gradle )本身比 Gem 优秀呢,还是因为十年前的项目基本没有用依赖管理(直接把依赖的库放进来,不去更新当然不会出问题)
    lianghudou
        12
    lianghudou  
    OP
       2016-07-02 13:11:27 +08:00   2
    @matsuijurina
    所以我觉得 php 用 composer 的都是吃饱了撑的, php 现在已经分成 3 个阵营,原生阵营、传统框架阵营、 composer 阵营,没错,我是原生阵营,不光不用包依赖,连框架也不用,除了 php 源码, php 项目的每一个细节自己都如了指掌,每次换服务器,直接 rsync 同步到新服务器,什么都不用管。
    greatghoul
        13
    greatghoul  
       2016-07-02 13:16:32 +08:00 via iPhone
    铜币拿去
    blacklee
        14
    blacklee  
       2016-07-02 13:16:59 +08:00   1
    年轻人,不要这么喜欢呵呵。
    既然是线上的产品系统,就应该不使用会频繁升级的容器。 Ubuntu 的问题就是更新太频繁,作为 Desktop 当然没问题,自己爱咋搞就咋搞,但是作为 Server ,我想没人会有事没事就折腾更新升级的。
    之前我选择 OS 之前,也是对 Ubuntu 远比 CentOS 熟悉,但是考虑到需要一个更稳定的 OS ,还是选了自己不熟悉的 CentOS 。
    karloku
        15
    karloku  
       2016-07-02 13:20:45 +08:00   1
    3 年都舍不得升级一下 gem... 如果你真的很保守不愿意随便升级 gem 的话, 那就在 Gemfile 里把版本锁住, 并且把 Gemfile.lock 加入版本管理.
    publicAdmin
        16
    publicAdmin  
       2016-07-02 13:26:48 +08:00
    铜币拿去,
    求不黑 rails 好吗。
    话说我也主 Java 开发的,但是 Java 也需要升级包依赖好吗。例如之前爆出的 strus2 的漏洞,然后升级这个包的同时你能保证不升级其他包?不影响其他包?再者如 1L 所说,现在 Node , Python , PHP 不都是这种强依赖?
    并且 1L 也给出解决方案了,你怕 Linux 版本升级,你怕包升级,你想迁移至一模一样的运行环境,上 Docker 啊。
    so ,这锅 rails 不背。
    lianghudou
        17
    lianghudou  
    OP
       2016-07-02 13:28:32 +08:00
    @karloku 不是舍不得升,有的 gem 新版本跟 rails 3 已经不兼容了,但是老版本又跟 ruby 新版本不兼容,如果用老版本 ruby 呢, passenger 就装不上了。

    简言之,就是有的 gem 必须用老版本,有的 gem 必须用新版本,一个 gem 的坑就把整个项目搁浅了。


    在这里也跟用 flask 的 pythoner 一个忠告,自己玩玩的话用 flask 可以,如果长期运营的项目还是 django ,用一大堆的第三方库建的项目,过几年就知道危害了。
    ysr1023
        18
    ysr1023  
       2016-07-02 13:38:33 +08:00   1
    rails 算新技术啦?你让一堆 js 框架情何以堪...

    我司有 3 年以上的 rails 项目,运行得好好的, lz 请从自己身上找找原因吧。
    lululau
        19
    lululau  
       2016-07-02 13:41:53 +08:00 via iPhone   2
    典型的拉不出屎怪地球引力不够
    julor
        20
    julor  
       2016-07-02 14:07:03 +08:00 via Android
    用 golang 编译后就是一个可执行文件,不存在依赖,这么好的语言不用?
    cxh116
        21
    cxh116  
       2016-07-02 14:13:38 +08:00 via Android
    java 现在都 1.8 了, 1.7 都结束支持了。但还有很多线上环境用 1.4 1.5 。他们的项目不升级处理在 java 1.8 环境上面部署吗?

    既然不愿意升级,就都用老版本的东西。 ruby 1.8.7 肯定兼容 rails 3 。 ruby 1.8 都默认没有 gem , rake ,需要自己手动装,至于怎么安装指定的 gem ,好好看看 rubygems 的 gem 命令参数吧。
    jetbillwin
        22
    jetbillwin  
       2016-07-02 14:15:26 +08:00
    Github 表示不服,你不更新,锁定版本不就好了。自己技术差,怪不得别人。另外,长期运营,难道你想写了一个代码,十年都不动了???
    aveline
        23
    aveline  
       2016-07-02 14:17:16 +08:00
    Grails 大法好(逃
    bclerdx
        24
    bclerdx  
       2016-07-02 14:19:28 +08:00
    @cxh116 却是,很多线上环境还是 JAVA JDK 1.4 、 1.5 、 1.6 的古老环境,针对 JAVA JDK 1.8 环境没有部署。
    SmiteChow
        25
    SmiteChow  
       2016-07-02 14:21:12 +08:00
    不可能啊,没有 virualenv 吗?我记得是有的。
    PublicFourWord
        26
    PublicFourWord  
       2016-07-02 14:22:18 +08:00   2
    如果不会用 rails ,千万别用 rails
    如果不会用 xxx ,千万别用 xxx
    wsy2220
        27
    wsy2220  
       2016-07-02 14:37:56 +08:00
    自己能力问题不要赖别人
    chareice
        28
    chareice  
       2016-07-02 14:46:51 +08:00
    楼主处处传授人生的经验啊,你咋不上天呢。
    spark
        29
    spark  
       2016-07-02 15:54:44 +08:00
    铜币拿走, 莫黑我大铁路!
    ichou
        30
    ichou  
       2016-07-02 16:44:34 +08:00 via iPhone
    php 现在已经分成 3 个阵营

    请问是楼主自己总结的吗
    chloerei
        31
    chloerei  
       2016-07-02 16:48:43 +08:00
    Rails Conf 2012 Keynote: Progress by David Heinemeier Hansson

    RangerWolf
        32
    RangerWolf  
       2016-07-02 17:02:47 +08:00
    虽然楼主我基本上赞同你的意见,但是你在 V2 上开喷某个语言不行,不是找骂吗?
    phpuser
        33
    phpuser  
       2016-07-02 17:04:31 +08:00 via Android
    10 年前的 Rails 项目仍在发挥余热的路过。 10 年没改过代码,只是换了几次服务器。
    frankzeng
        34
    frankzeng  
       2016-07-02 18:11:33 +08:00
    你的 ubuntu 不要升级嘛,然后直接把所有库文件拷过去。
    techmoe
        35
    techmoe  
       2016-07-02 18:47:42 +08:00 via Android
    docker 解决最佳范例
    xiaket
        36
    xiaket  
       2016-07-02 19:20:49 +08:00
    刚接手一个线上运营了 7 年+的 rails 项目...
    mml
        37
    mml  
       2016-07-02 19:46:46 +08:00
    长期运营的项目,我估计除了重启,没人想 /敢去碰。
    vinceguo
        38
    vinceguo  
       2016-07-02 19:53:47 +08:00 via Android
    什么时候升级 os 版本都不算大事了? naive
    zaishanfeng
        39
    zaishanfeng  
       2016-07-02 20:04:37 +08:00 via Android
    这个问题任何语言都存在。我觉得你应该先找出问题在哪。
    julor
        40
    julor  
       2016-07-02 20:09:41 +08:00 via Android
    @zaishanfeng golang 不存在
    sagnitude
        41
    sagnitude  
       2016-07-02 20:12:03 +08:00
    一个已经基本结束开发,正在长期稳定运营的工程,你这升级操作系统版本是不是太激进了?
    zaishanfeng
        42
    zaishanfeng  
       2016-07-02 20:13:45 +08:00 via Android
    @julor 如果操作系统版本不一样应该也存在的
    lightening
        43
    lightening  
       2016-07-02 20:22:44 +08:00
    你要么什么都不升级,要么一直升级到最新版。怎么会突然只升级一个依赖需要 eventmachine 了呢?

    “为了个 rails 放弃 ubuntu ,呵呵~”
    真不知道你的主要产品是你的 rails app 还是运行它的操作系统,呵呵。
    Arnie97
        44
    Arnie97  
       2016-07-02 20:23:10 +08:00 via Android
    @julor 不就是默认静态链接吗,并不能避免问题,换个内核试试?
    julor
        45
    julor  
       2016-07-02 20:39:00 +08:00 via Android
    @Arnie97 目前没遇到
    julor
        46
    julor  
       2016-07-02 20:40:32 +08:00 via Android
    @Arnie97 直接编译成可执行文件,没有依赖。
    Actrace
        47
    Actrace  
       2016-07-02 20:57:01 +08:00
    说白了,楼主更在意编程语言的生态。
    越高级的编程语言,面对环境变更时,前后对接的差异更少。当然这个也跟语言设计者有一定的关系,但是 PHP 阵营的好处是,这种语言的发展基本是堆叠特性,而非重新设计。因此我们的代码可以流转很长的一段时间而无须重构(或者是大规模重构)。
    在实际生产生活中,我们不可能不升级操作系统或者是编程语言版本,及时你知道升级的改变可能不大,或者没有改变,但是基于安全考虑,基本上公司都是会要求升级的,因此 PHP 的升级成本相对较低,进而受到大量一线程序员(码畜)的欢迎。










    欢迎加入 PHP 阵营。
    Jakesoft
        48
    Jakesoft  
       2016-07-02 21:05:06 +08:00
    @Actrace 我想知道有哪些公司的哪些项目使用了 php7
    zhs227
        49
    zhs227  
       2016-07-02 21:07:42 +08:00
    经历过 2->3 的升级。表示只要锁住依赖,继续使用 rails2 ,就不会有大问题。

    gem 依赖过多容易出现的问题是,部分 gem 失去维护,好多年不更新版本了。因此在 2->3 的过程中,就有少部分的代码重写了,目的是移除那些死掉的 gem. PHP 的 packagist 理论上也是有这样的问题,但由于 php 在版本升级的过程中没有大破大立,因此问题显得不严重。

    如果一个 gem 好多年都不更新了,确实在使用的时候要慎重考虑。
    Arnie97
        50
    Arnie97  
       2016-07-02 21:38:33 +08:00 via Android
    @julor 只是对 Go 的包不依赖,有对底层的依赖,除非二进制是裸机运行,否则换系统(内核)可能不行。
    seamon
        51
    seamon  
       2016-07-02 22:57:47 +08:00
    你自己说的“满打满算 10 个 gem ”,要么你在 Gemfile 里锁版本,随便换服务器。要么你既然“长期运营”,就时常升级一下,也不会有问题。

    你这么大开大阖地玩 rails ,让我们这些依赖 100 多个 gem 跑了两三年正准备升 rails5 的项目,情何以堪啊。
    likuku
        52
    likuku  
       2016-07-02 23:31:43 +08:00
    服务器环境整体打包迁移嘛,软件环境完全一样就是了。
    izoabr
        53
    izoabr  
       2016-07-03 01:26:14 +08:00
    唉, python 用户一样
    orancho
        54
    orancho  
       2016-07-03 01:32:43 +08:00
    铜币给你了,别无脑黑秀下限。
    Numbcoder
        55
    Numbcoder  
       2016-07-03 01:38:25 +08:00
    厨子不好嫌灶歪
    jeffw
        56
    jeffw  
       2016-07-03 03:58:29 +08:00 via iPhone
    @Jakesoft 新浪微博在用 PHP7
    msg7086
        57
    msg7086  
       2016-07-03 05:59:33 +08:00
    一个不经常维护的系统也敢叫长期运营?
    你 PHP4.2 上写的项目能在 PHP7 下面跑吗?

    呵呵。
    grzhan
        58
    grzhan  
       2016-07-03 07:12:19 +08:00
    关于 LZ 对于 flask 的看法表示一定程度的赞同
    julor
        59
    julor  
       2016-07-03 07:15:48 +08:00 via Android
    @Arnie97 普通的 web 不存在
    hging
        60
    hging  
       2016-07-03 08:29:09 +08:00 via iPhone
    自己不会用就怪框架怪语言,快去用 php 吧。
    TangMonk
        61
    TangMonk  
       2016-07-03 09:28:12 +08:00 via Android
    把那个依赖 eventmachine 的 gem folk 下来改了就好了嘛
    colorfulberry
        62
    colorfulberry  
       2016-07-03 11:14:03 +08:00
    对于 rails 你不就是换个环境么,要么带上 Gemfile.lock 要么就升级下项目
    rootooroot
        63
    rootooroot  
       2016-07-03 11:30:58 +08:00
    楼主不想和楼上的说话 并向他们扔了一堆依赖 =。=
    Ahri
        64
    Ahri  
       2016-07-03 12:21:45 +08:00
    醉了,看标题以为是跟我一样吐槽 Rails 各种落后的理念,结果是来推 Java 和 PHP 的。。。

    倒车,请注意。倒车,请注意。
    Balthild
        65
    Balthild  
       2016-07-03 12:34:15 +08:00 via Android
    @lianghudou 如果你的 php 项目要几十个、上百个依赖,每个依赖你都手动放置、加载、升级,累不累啊你。
    HLT
        66
    HLT  
       2016-07-03 12:38:12 +08:00
    说得好像 PHP 不用 composer 了一样。。。
    jeremaihloo
        67
    jeremaihloo  
       2016-07-03 13:59:30 +08:00 via Android   1
    这个时候就还考虑夸一夸我大 golang 了
    newghost
        68
    newghost  
       2016-07-03 14:05:22 +08:00
    我觉 php 升级起来兼容问题也挺多的
    2225377fjs
        69
    2225377fjs  
       2016-07-03 14:11:39 +08:00
    楼主说的还是有一定客观性的呀,在版本稳定兼容性方面 python , nodejs , rails 之类的确实比不上 java ,不过上 V2EX 来喷一些语言,看样子犯了大忌啊。

    如果想要少花一些精力在版本升级方面的工作,而且要长期维护,选 Java 还是有优势的。
    akira
        70
    akira  
       2016-07-03 17:31:41 +08:00
    只要是升级,兼容性都会有可能出问题的。
    锁定版本运行环境就是了,不要什么都依赖网络自动下载
    nine
        71
    nine  
       2016-07-03 19:27:45 +08:00
    rails 项目,只要每次 release 版本都跟着升级就好了
    reus
        72
    reus  
       2016-07-03 19:30:37 +08:00
    把原先的文件系统整个复制下来,然后用 systemd-nspawn / docker / rkt 跑。
    把原先的文件系统整个复制下来,然后用 systemd-nspawn / docker / rkt 跑。
    把原先的文件系统整个复制下来,然后用 systemd-nspawn / docker / rkt 跑。

    虽然 rails 这样确实值得批评,但是是有办法解决的,没必要重写。
    16500682
        73
    16500682  
       2016-07-03 22:25:11 +08:00 via Android
    善用 docker
    mingyu
        74
    mingyun  
       2016-07-03 22:47:07 +08:00
    php7 ,你值得拥有
    lguan
        75
    lguan  
       2016-07-04 02:08:13 +08:00
    个人水平问题,正好前两天有个客户一个服务器坏,上面跑的项目是 rails 3 的, 12 年跑到现在,没有一次停机,直到前几天服务器挂掉,重新挪到新的服务器上又跑了。

    手上还有几个项目都是跑了五六年的,不过一直保持着版本的升级
    TimLang
        76
    TimLang  
       2016-07-04 09:38:13 +08:00 via Android
    一个项目才 10 个 gem 也来黑。
    firefox12
        77
    firefox12  
       2016-07-04 16:28:22 +08:00
    用得很少的一段时间,但是我想说一个一升级就改接口的库也好 语言也好,只能说明了不成熟。一个 ruby on rails 的教程, 3.0 4.0 的创建项目的命令都不一样了 这感觉就是这个大楼的门每天都变样子....
    java 最早的代码在 java 8 里也是能跑的呀, windows95 的程序在 win7 里也是能跑的呀,这才是底蕴。一个 75 个 gem 的程序, 升级就是泪,虽然我 ruby 渣,为什么 java php cpp python 库升级 语言升级 我都没这种感觉呢?
    xuyifei
        78
    xuyifei  
       2016-07-04 17:52:41 +08:00
    。。感觉楼主已经被喷走了
    lithium4010
        79
    lithium4010  
       2016-07-04 20:24:21 +08:00
    @karloku 同意哈哈
    dreamfanbin
        80
    dreamfanbin  
       2016-07-05 09:50:58 +08:00
    @firefox12 http://guides.rubyonrails.org/v3.2/getting_started.html#creating-the-blog-application
    http://guides.rubyonrails.org/v4.0/getting_started.html#creating-the-blog-application
    求解哪里不一样了

    求解大版本更新的时候不费力升级的秘诀。 现在还有好多库都只有 python2 而没有 python3 的版本。。
    heimirror
        81
    heimirror  
       2016-08-03 12:00:12 +08:00
    我们公司 rails2 运行快 10 年了
    wpzero
        82
    wpzero  
       2016-12-11 08:31:17 +08:00 via iPad
    Github airbnb 不都是吗?项目好几年不维护升级,环境不固化,还说毛呀。
    cmingxu
        83
    cmingxu  
       2023-02-23 09:48:32 +08:00
    rails 表示不服, 其他框架同样存在类似问题,试想一下 c++
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 21:36 PVG 05:36 LAX 14:36 JFK 17:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86