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

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

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

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

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


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

我司有 3 年以上的 rails 项目,运行得好好的, lz 请从自己身上找找原因吧。
lululau
2016-07-02 13:41:53 +08:00
典型的拉不出屎怪地球引力不够
julor
2016-07-02 14:07:03 +08:00
用 golang 编译后就是一个可执行文件,不存在依赖,这么好的语言不用?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/289785

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX