RVM Gemset - Bundler& Capistrano在制作中

时间:2011-10-02 19:47:01

标签: rvm capistrano

我正在使用capistrano,bundler和rvm将rails应用程序部署到VPS。 这是我的deploy.rb

的一部分
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"     
require "bundler/capistrano"             # Load RVM's capistrano plugin.

set :rvm_type, :system
set :rvm_ruby_string, '1.9.2@gemset_name'

我的.rvmrc

rvm --create use 1.9.2@gemset_name

当我登录服务器时,我注意到创建了rvm gemset,但是所有的gem都安装在/shared/bundle/ruby/1.9.1/gems中 - 不在gemset中(/ usr / local / rvm) /宝石)

我在开发中使用RVM,我认为它很棒但是什么时候部署到生产中。什么是最佳做法?有没有办法告诉bundler在gemset中安装gem?

我甚至需要宝石套装吗? (似乎捆绑器已经隔离了宝石),我错过了什么吗?

请帮助我理解!

非常感谢

1 个答案:

答案 0 :(得分:17)

我也在开发和生产中使用RVM。然而,虽然我在开发中使用gemsets来分隔我的rails项目之间的gem,但我只使用RVM在我的生产VPS上安装rubies并让Bundler处理我的gem的版本。

通过require "bundler/capistrano"使用捆绑器集成自动为捆绑器设置一些内容。您可以在Bundlers Github page中查看此背后的代码。基本设置是捆绑执行此命令:

bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test

如您所见,给出了--deployment--path标志,告诉Bundler将您的gems与shared/bundle目录中的应用程序捆绑在一起,并且只使用在你的Gemfile.lock(即正在开发中的版本)。由于bundle目录是在部署之间共享的,因此我发现它与为每个应用程序使用RVM gemset相当,只是更容易。

如果您仍想将宝石放入不同的宝石中,我建议您this tutorial from Darcy Laycock进一步阅读。