RVM Gemset - 生产中的Bundler和Capistrano

Jaz*_*min 20 capistrano rvm

我正在使用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'
Run Code Online (Sandbox Code Playgroud)

我的.rvmrc

rvm --create use 1.9.2@gemset_name
Run Code Online (Sandbox Code Playgroud)

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

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

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

请帮我理解!

非常感谢你

Hec*_*lot 17

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

使用捆绑器集成通过require "bundler/capistrano"自动为捆绑器设置一些东西.你可以在Bundlers Github页面中看到这背后的代码.基本设置是bundle执行此命令:

bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test
Run Code Online (Sandbox Code Playgroud)

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

如果你仍然想把宝石放在不同的宝石中,我会推荐Darcy Laycock的这个教程进一步阅读.