我在服务器上有两个文件,一个在每个环境的共享目录中,名为 rvmrc。这包含rvm use ree-1.8.7-2012.02@appname-production --create
用于生产和rvm use ree-1.8.7-2012.02@appname-staging --create
登台。这应该允许应用程序在其自己的 gemset 下运行,因为我已经在部署脚本中构建了一个任务,以将相应的shared/rvmrc
文件链接到应用程序中.rvmrc
。在我的deploy.rb
示例中,该任务显示在下面。
不过,我仍然需要让 bundler 在部署期间使用正确的 gemset。我想我可以通过使用set :rvm_ruby_string, "ree-1.8.7-2012.02@appname-#{rails_env}"
动态设置rvm_ruby_string
环境的 gemset 来做到这一点。但是,我发现我的部署仅使用生产 gemset - 即使在使用cap staging deploy
.
有关我的思考过程的更多信息,请参阅这个问题,甚至尝试这样做(如果您认为这只是一个坏主意,请加入)。
我需要更改什么才能让我的部署使用基于环境的正确 gemset?
在我的部署文件中,我拥有的相关行(我已经剥离了很多)是:
require 'rvm/capistrano'
require 'capistrano/ext/multistage'
require 'bundler/capistrano'
set :stages, %w(staging production)
set :default_stage, "staging"
set :rvm_ruby_string, "ree-1.8.7-2012.02@appname-#{rails_env}"
set :rvm_type, :system
set :bundle_without, [:development]
namespace :deploy do
task :rvmrc do
run "rm #{latest_release}/.rvmrc; ln -s #{shared_path}/rvmrc #{latest_release}/.rvmrc"
end
end
before "bundle:install", "deploy:rvmrc"
在我的 production.rb 文件中,我拥有的相关行(我已经删除了很多)是:
set :branch, "master"
set :rails_env, "production"
在我的 staging.rb 文件中,我拥有的相关行(我已经删除了很多)是:
set :branch, "staging"
set :rails_env, "staging"