总之,我觉得在服务器安装 rvm 带来的麻烦大于便利。
如果真有必要在服务器切换(注:不是替换)ruby 版本,我更愿意去尝试一下 ruby-build + chruby,因为我能知道自己做了什么..:
环境变量问题也可以 /bin/bash -l -c "..."
单独的脚本 sh bang 可以这么写:
#! /bin/bash -l
就可以直接执行各种免疫环境问题了
因为 -l 参数可以载入 bashrc
#10 楼 @hooopo https://github.com/jasl/a_rails_start_up_omakase/tree/master/lib/generators/conf/templates 你看我脚本的模板就知道了...rvm 的 wrapper 和 environments 应该可以解决一切类似的问题,当然确实是坑没错,但对 rvm 了解以后其实不是很棘手的问题...
#11 楼 @jasl https://github.com/jasl/a_rails_start_up_omakase/blob/master/config/deploy.rb#L29-L39 这是什么?还有你确定你部署使用的是 rvm 设置的 ruby?
#17 楼 @hooopo rvm-capistrano 这个 gem 啊,rvm 官网的文档里就有的 https://rvm.io/integration/capistrano/
cron job 只要在脚本里面加个 source 就搞定了啊,一直在生产环境用 rvm,很方便啊 source /home/user/.rvm/environments/ruby-xxx
如果服务器没有需要维护老版本的 ruby,基本上不需要用 rvm 当然,以后 2.0 和 1.9.3 共存又是一会事
不过,反正我是用 rvm 的,习惯后就好了
我用 whenever 生成 crontab 任务的时候是用 bash -l -c 的,-l 参数让它作为 login shell,应该就是和自己 ssh 登陆后行为一致了。
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 好久没用了,服务器上还是要个版本切换的,有些版本升级还是必要的