サーバーには 2 つのファイルがあり、それぞれの環境の共有ディレクトリに 1 つずつ、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
示します。
ただし、デプロイ中に正しい gemset を使用するには、バンドラーを取得する必要があります。環境のgemsetset :rvm_ruby_string, "ree-1.8.7-2012.02@appname-#{rails_env}"
に動的に設定するために使用することで、これを行うことができると思いました。rvm_ruby_string
ただし、デプロイを行っている場合でも、本番用の 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"