我正在使用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/gemset)中。
我在开发中使用RVM,我认为它很棒,但是什么时候是部署到生产环境中的时候。最佳实践是什么?有没有办法告诉bundler在gem集中安装gem?
我甚至还需要一个宝石吗?(似乎bundler已经隔离了gemsets),我是不是遗漏了什么?
请帮我理解一下!
非常感谢
发布于 2011-10-28 21:59:03
我在开发和生产中也使用RVM。然而,虽然我在开发中使用gemsets来分离我的rails项目之间的gem,但我只使用RVM在我的生产VPS上安装rubies,并让Bundler处理我的gem的版本。
通过require "bundler/capistrano"使用bundler集成会自动为bundler设置一些内容。您可以在Bundlers Github page中看到这背后的代码。基本设置是为了使捆绑包执行以下命令:
bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test正如您所看到的,给定了--deployment和--path标志,这告诉Bundler将gem与shared/bundle目录中的应用程序捆绑在一起,并且只使用Gemfile.lock中指定的版本(即正在开发中的版本)。由于捆绑包目录是在不同部署之间共享的,因此我发现它可以与为每个应用程序使用RVM gemsets相媲美,只是更简单。
如果你仍然想把gem放在不同的gem中,我建议你进一步阅读this tutorial from Darcy Laycock。
https://stackoverflow.com/questions/7628763
复制相似问题