lianghudou

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

  •  
  •   lianghudou · Jul 2, 2016 · 15619 views
    This topic created in 3781 days ago, the information mentioned may be changed or developed.
    基本上 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 仍是最佳选择,那些新技术拿来玩玩就行了,别用生产环境。
    Supplement 1  ·  Jul 2, 2016
    算了,项目用 php 重写了
    83 replies  •  2023-02-23 09:48:32 +08:00
    dishonest
    dishonest
    Jul 2, 2016
    1
    请用 docker 之类。 rails 部署时麻烦了点,但同理 nodejs , python 也会遇到同样问题。
    dorentus
    dorentus
    Jul 2, 2016 via iPhone❤️2
    2
    Github 表示不服。
    shyling
    shyling
    Jul 2, 2016 via iPad
    3
    所以什么都不要升级就好了。。。
    blacklee
    blacklee
    Jul 2, 2016
    4
    线上已经运营 2 年+,版本为 Ruby: 2.1.1, Rails: 4.1 。
    并没有什么问题。
    blacklee
    blacklee
    Jul 2, 2016❤️1
    5
    在 Gemfile.lock 里查看依赖关系
    blacklee
    blacklee
    Jul 2, 2016
    6
    呃,其实吧,你的问题可能在线上环境不要用 Ubuntu 。
    抱歉一下子添加了 3 个评论,应该合并成一个比较好。
    jerray
    jerray
    Jul 2, 2016
    7
    长期运营的项目,为什么不随着语言和框架的更新进行适当升级?
    lianghudou
    lianghudou
    OP
    Jul 2, 2016
    8
    @blacklee 为了个 rails 放弃 ubuntu ,呵呵~
    lianghudou
    lianghudou
    OP
    Jul 2, 2016❤️1
    9
    @jerray rails 跟 php 和 java 不一样,每次升级 api 都被改的面目全非,项目没法随着框架升级。
    matsuijurina
    matsuijurina
    Jul 2, 2016 via Android
    10
    现在有 docker 了,这些都不是问题了。要说依赖的兼容问题, php 用了 composer 之后也一样。
    mdluo
    mdluo
    Jul 2, 2016 via iPhone
    11
    项目的依赖本来就需要不断及时升级,及时修复

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

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

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


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

    我司有 3 年以上的 rails 项目,运行得好好的, lz 请从自己身上找找原因吧。
    lululau
    lululau
    Jul 2, 2016 via iPhone❤️2
    19
    典型的拉不出屎怪地球引力不够
    julor
    julor
    Jul 2, 2016 via Android
    20
    用 golang 编译后就是一个可执行文件,不存在依赖,这么好的语言不用?
    cxh116
    cxh116
    Jul 2, 2016 via Android
    21
    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
    jetbillwin
    Jul 2, 2016
    22
    Github 表示不服,你不更新,锁定版本不就好了。自己技术差,怪不得别人。另外,长期运营,难道你想写了一个代码,十年都不动了😂???
    aveline
    aveline
    Jul 2, 2016
    23
    Grails 大法好(逃
    bclerdx
    bclerdx
    Jul 2, 2016
    24
    @cxh116 却是,很多线上环境还是 JAVA JDK 1.4 、 1.5 、 1.6 的古老环境,针对 JAVA JDK 1.8 环境没有部署。
    SmiteChow
    SmiteChow
    Jul 2, 2016
    25
    不可能啊,没有 virualenv 吗?我记得是有的。
    PublicFourWord
    PublicFourWord
    Jul 2, 2016❤️2
    26
    如果不会用 rails ,千万别用 rails
    如果不会用 xxx ,千万别用 xxx
    wsy2220
    wsy2220
    Jul 2, 2016
    27
    自己能力问题不要赖别人
    chareice
    chareice
    Jul 2, 2016
    28
    楼主处处传授人生的经验啊,你咋不上天呢。
    spark
    spark
    Jul 2, 2016
    29
    铜币拿走, 莫黑我大铁路!
    ichou
    ichou
    Jul 2, 2016 via iPhone
    30
    php 现在已经分成 3 个阵营

    请问是楼主自己总结的吗
    chloerei
    chloerei
    Jul 2, 2016
    31
    Rails Conf 2012 Keynote: Progress by David Heinemeier Hansson

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

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










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

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

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

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

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

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

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

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

    手上还有几个项目都是跑了五六年的,不过一直保持着版本的升级
    TimLang
    TimLang
    Jul 4, 2016 via Android
    76
    一个项目才 10 个 gem 也来黑。
    firefox12
    firefox12
    Jul 4, 2016
    77
    用得很少的一段时间,但是我想说一个一升级就改接口的库也好 语言也好,只能说明了不成熟。一个 ruby on rails 的教程, 3.0 4.0 的创建项目的命令都不一样了 这感觉就是这个大楼的门每天都变样子....
    java 最早的代码在 java 8 里也是能跑的呀, windows95 的程序在 win7 里也是能跑的呀,这才是底蕴。一个 75 个 gem 的程序, 升级就是泪,虽然我 ruby 渣,为什么 java php cpp python 库升级 语言升级 我都没这种感觉呢?
    xuyifei
    xuyifei
    Jul 4, 2016
    78
    。。感觉楼主已经被喷走了
    lithium4010
    lithium4010
    Jul 4, 2016
    79
    @karloku 同意哈哈
    dreamfanbin
    dreamfanbin
    Jul 5, 2016
    80
    @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
    heimirror
    Aug 3, 2016
    81
    我们公司 rails2 运行快 10 年了
    wpzero
    wpzero
    Dec 11, 2016 via iPad
    82
    Github airbnb 不都是吗?项目好几年不维护升级,环境不固化,还说毛呀。
    cmingxu
    cmingxu
    Feb 23, 2023
    83
    rails 表示不服, 其他框架同样存在类似问题,试想一下 c++
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4153 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 422ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    ♥ Do have faith in what you're doing.