RVM/rbenv capistrano 跟 rvm

lulalala · 2013年07月18日 · 最后由 leomao10 回复于 2013年07月22日 · 8375 次阅读

我使用 capistrano 部属 production environment。我的 deploy:setup 功能会自动更新 capistrano 还有抓新版的 ruby。

set :rvm_type, :user
set :rvm_ruby_string, '1.9.3@prod'
set :rvm_autolibs_flag, "read-only"
before 'deploy:setup', 'rvm:install_rvm'   # install RVM
before 'deploy:setup', 'rvm:install_ruby'  # install Ruby and create gemset, OR:
before 'deploy:setup', 'rvm:create_gemset' # only create gemset

require 'rvm/capistrano'
require 'bundler/capistrano'

不过我还是搞不大清楚,是否要手动制作个 .rvmrc / .ruby-version 档案放在 production 上?(就算有设,这应该只影响我 ssh 进去的 ruby 版本吧?)

我虽然有设 rvm_ruby_string 可是 rvm 好像还是抓 rvm default ruby version。

还有我的 gem 最后好像是跟 bundler,那我设 rvm gemset 好像就没有用了。是吗?

首先,我想问的是为什么要在 production 下跑 rvm?

然后我记得 rvm_ruby_string 只是用在rvm:create_gemset, 在项目下用的话是需要.rvmrc 的,如果有了 rvmrc 的话,可以把:rvm_ruby_string 去掉,default 是会去读.rvmrc 的(但我记得不是太清楚,你可以看看 rvm-cap 的代码)

就像在开发环境下也不需要 gemset 一样,你的生产环境一般也不必用 gemset 的

@leomao10 啊,的确。 以前升 Ruby 到 1.9 的时候,为了一台机器跑两个 Rails,所以就这么用了。然后用他安装 Ruby 很懒人。现在这样作是想要升级到 2.0 的准备,只是测试时如问题一样不如我想像般地运作。

所以你都是手动准备新的 Ruby 啰?这样要 Ruby 升级不会觉得没有安全感吗?

.rvmrc 一般是放在哪里呢(我没有把这放进 git 中),是手动每次放进去 current 资料夹吗?

我一般是把.rvmrc 放在 git repo 里面的,但其实最新的 rvm 可以用.ruby-version 加 .rvm-gemset 代替

就是说你的 staging 和 production 是放在一起的咯;虽然我们也是这样做,但是这样做并不是一个好的习惯呢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号