V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lianghudou
V2EX  ›  Ruby on Rails

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

  •  
  •   lianghudou · 2016-07-02 12:26:09 +08:00 · 13808 次点击
    这是一个创建于 3069 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基本上 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
    mingyun
        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   ·   实用小工具   ·   5974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 06:18 · PVG 14:18 · LAX 22:18 · JFK 01:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.