3

ステージングと本番用に異なるgemsetを使用するようにアプリを構成することを考えています。私の思考プロセスは、環境を別々のgemsetに分割することで、gem / ruby​​ / railsを更新する必要がある場合に、より自由に使えるようになるというものです。その変更を加えて、本番アプリ/ジェムセットを邪魔することなく、ステージングですべてをテストすることができます。

これを実現するために、サーバー上に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用とステージング用が含まれます。

shared/rvmrc対応するファイルを次のようにアプリにリンクするタスクをデプロイスクリプトに含めます.rvmrc

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"

これは実際には良い考えですか、それとも私は物事を複雑にしすぎていますか?

4

2 に答える 2

3

理想的には、本番環境で使用しているすべての宝石を開発中に使用する必要があります。特定の環境に固有で、他の環境では必要のない宝石のみを分割します。ほとんどのアプリでは、通常、開発にのみ必要な特定のgemしかありません。宝石を分割する必要がある場合は、次のようなグループに簡単に配置できます。

group :development do 
  gem 'development gem'
end

group :production do
  gem 'production gem'
end
于 2013-01-04T07:34:33.653 に答える
0

彼が言ったとき、 house9は上記で正しかった:

'bundler / capistrano'は、インストールディレクトリの下の共有/バンドルにすべてのgemをインストールすると確信しています。同じマシンでステージングと本番環境を実行する場合は、インストールディレクトリを変える必要があるため、次の方法でgemを分離できると思います。デフォルト?

cd /path/to/staging; bundle listとを実行すると、サーバー上でこれが実際に動作していることを確認できますcd /path/to/production; bundle list。環境ごとに異なるgemがインストールされている場合は、各コマンドから異なるリストを取得します。

house9も述べたように、ステージングまたは本番環境から実行するときに行うすべてのことを確認する必要があります。タスクのレーキ、サーバーの起動などですbundle exec

bundler / capistranoを使用する場合、デフォルトでgem分離が存在するため、環境を別々のgemsetに配置する理由はありません。

于 2013-01-05T00:55:11.050 に答える