瞎扯淡 别在服务器上安装 RVM

hooopo · May 29, 2013 · Last by stephen replied at August 10, 2013 · 6305 hits
  1. 坑太多:https://rvm.io/integration/
  2. 服务器上切换 Ruby 版本的需求不是很大
  3. 可以在开发机测试之后选一个合适版本放服务器上

总之,我觉得在服务器安装 rvm 带来的麻烦大于便利。

如果真有必要在服务器切换(注:不是替换)ruby 版本,我更愿意去尝试一下 ruby-build + chruby,因为我能知道自己做了什么..:

什么发生了?

rvm 用得好好的,没遇到啥坑啊

把经验分享一下吧 ;)

#1 楼 @leopku #2 楼 @skandhas 就是说你用到了下面的每个软件和 rvm 集成都需要额外的设置 这里面列的好像还不全,比如就漏了 postfix

Databases
Zsh
Fish
Bundler
MemProf
Passenger
Textmate
Emacs
Netbeans
Culerity
Capistrano
Chef
SketchUp
Cron
God
Jenkins
MacPorts
QT Ruby
TeamCity
Tk
Vagrant
Vim
Gnome-terminal
XTerm

#3 楼 @hooopo vim 不跟 rvm 集成没遇到啥问题哈 列出来的好多都不是必须的吧

另外,还可以利用配置管理工具 某一处配置,其它地方同步过来就好了

感觉唯一的坑就是 crontab 需要单独载入 RVM 环境,才能跑 rake 任务

#6 楼 @huacnlee 所有和环境变量相关的都有问题,比如 cron、cap、postfix。

#3 楼 @hooopo 在三台服务器上都在用 rvm,用 rvm 的 wrapper 基本可以解决问题了,我也使用 postfix bundler capistrano 都没有问题的,坑是在 sh 上,这厮不支持环境变量,所以 monit 之类的东西会尴尬,但也可以在 sh 中 source environments/ruby-1.9.3-p429解决

#7 楼 @hooopo 但确实 rvm 并不需要...但是 centos 这样软件包版本比较老的发型版里,没有新的 ruby。。。再加上懒...所以就上了 rvm...不过我在整个过程中 因为不懂 sh 在搞定 monit 时候被坑了两天,其他的软件基本没有花精力

#8 楼 @jasl 都没有额外设置/装 gem? postfix 在用 alias pipe scripting 的时候就出问题了。

#10 楼 @hooopo 没有啊... alias shell 没用到,但我觉得不是问题.... monit 之类没法混入环境变量 但你可以在 sh 里主动 source 一下解决的

环境变量问题也可以 /bin/bash -l -c "..."

单独的脚本 sh bang 可以这么写:

#! /bin/bash -l

就可以直接执行各种免疫环境问题了

因为 -l 参数可以载入 bashrc

#6 楼 @huacnlee 不止是 cron 任务,启动脚本也是需要加载的。

#10 楼 @hooopo https://github.com/jasl/a_rails_start_up_omakase/tree/master/lib/generators/conf/templates 你看我脚本的模板就知道了...rvm 的 wrapper 和 environments 应该可以解决一切类似的问题,当然确实是坑没错,但对 rvm 了解以后其实不是很棘手的问题...

#9 楼 @jasl 最近 Debian Wheezy 里有 1.9.3 了,喜闻乐见啊。

#15 楼 @RainFlying 哎,似乎红帽系这边还没... 还好吧,我的配置文件都是通过模板生成的,坑都填好了,所以配生产环境不麻烦的说。。。

#11 楼 @jasl https://github.com/jasl/a_rails_start_up_omakase/blob/master/config/deploy.rb#L29-L39 这是什么?还有你确定你部署使用的是 rvm 设置的 ruby?

#19 楼 @hooopo 1.9.3-p194, 但是包名叫做 ruby1.9.1

#17 楼 @hooopo rvm-capistrano 这个 gem 啊,rvm 官网的文档里就有的 https://rvm.io/integration/capistrano/

cron job 只要在脚本里面加个 source 就搞定了啊,一直在生产环境用 rvm,很方便啊 source /home/user/.rvm/environments/ruby-xxx

我们一直在生产环境使用 RVM,用得很好,尤其对于升级 Ruby 非常方便,还没有遇太棘手的问题。

#22 楼 @quakewang 我也是这么搞的

#9 楼 @jasl 有些服务器上同时跑了多个 ruby 版的应用,用 rvm 还是很方便的。

#26 楼 @ashchan 啊...我是提倡用 rvm 的哇 @hooopo 我估计是遇到环境变量的坑了

如果服务器没有需要维护老版本的 ruby,基本上不需要用 rvm 当然,以后 2.0 和 1.9.3 共存又是一会事

不过,反正我是用 rvm 的,习惯后就好了

#27 楼 @jasl 这是顺着「并不需要」引伸一下:)

我用 whenever 生成 crontab 任务的时候是用 bash -l -c 的,-l 参数让它作为 login shell,应该就是和自己 ssh 登陆后行为一致了。

其实用 resque-scheduler 可以完全不生成 cron jobs

#32 楼 @aptx4869 crontab 是系统服务更可靠,以前用 resque 的时候,如果程序异常,监视进程有可能会挂。

#33 楼 @Rei 嗯……可以用 shell 在搞个 nanny 来定时醒来检查重启……

#34 楼 @aptx4869 自从用了 crontab(whenever),就不用考虑进程挂没挂的事啦。

还有 hadoop。。

#31 楼 @Rei

Back in 2010, we suggested using /bin/bash -l -c to run scout via Cron when using RVM. However, this was a brute approach: /bin/bash -l -c tells bash to behave as a login, interactive process. However, as Daniel Szmulewicz elequently stated in the comments for the original blog post, "Cron jobs are by nature non-login, non-interactive processes".

rvm-bundler-and-cron-in-production-round-2 里面提到的第二种方式就需要将一个 ruby 的 bin 文件写成 sh,目的是 source 一下 rvm 的东西。好不折腾。

第三种就更好笑了。每个写 gem 的人还需要去关心用户是否使用了 rvm?把 rvm 给用户带来的问题推到了 gem 开发者,不知道这是方便还是不方便。

chruby 还不错,昨天因为 rbenv init 太慢了,转到 chruby 了,rvm 好久没用了,服务器上还是要个版本切换的,有些版本升级还是必要的

#22 楼 @quakewang 在哪个脚本里加啊?可以详细点吗?

hooopo in Install Ruby The "Postmodern" Way mention this topic. 12 Jul 13:36
You need to Sign in before reply, if you don't have an account, please Sign up first.