1

サーバーには 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"
4

1 に答える 1

2

アプリケーションを起動するときに、rubyのバージョンとgemsetを設定できます。つまり、リンクで神と一緒に使用するために説明されているように、rvmラッパーを使用します。そのように.rvmrcシンボリックリンクジャグリングは必要ありません。

つまり、Unicornを使用している場合は、ラッパーを作成します。

rvm use ree-1.8.7-2012.02@appname-production
rvm wrapper ree-1.8.7-2012.02@appname-production ree187prod unicorn

それはあなたに〜.rvm / bin/ree187prod_unicornを与えます。開始スクリプトでユニコーンの代わりに使用します。その後、Unicornは正しいルビーバージョンとgemsetを使用します。

于 2013-01-10T08:48:07.063 に答える