我正在使用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?
我甚至需要宝石套装吗? (似乎捆绑器已经隔离了宝石),我错过了什么吗?
请帮助我理解!
非常感谢
答案 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进一步阅读。