我正在使用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的这个教程进一步阅读.