アプリを heroku にテスト用に、amazon に本番用にデプロイしました。テストと開発 (ローカル) では postgresql を使用し、Amazon EC2 では Mysql を使用しました。したがって、pg gem はテストと開発でのみロードし、mysql2 gem は本番環境でロードする必要があります。
問題を回避するためのベスト プラクティスは何ですか?
ありがとう
アプリを heroku にテスト用に、amazon に本番用にデプロイしました。テストと開発 (ローカル) では postgresql を使用し、Amazon EC2 では Mysql を使用しました。したがって、pg gem はテストと開発でのみロードし、mysql2 gem は本番環境でロードする必要があります。
問題を回避するためのベスト プラクティスは何ですか?
ありがとう
Rails 3.2 と Rails 4 で Gemfile の動作は異なりますか?
そうでない場合は、どの gem をどの環境にロードするかを指定できます。
group :development, :test do
gem "pg"
end
group :production do
gem "mysql2"
end
ベスト プラクティスは、開発、テスト、および運用に同じ dbms を使用することです。しかし、それがあなたの聞きたかったことかどうかは疑わしい...
いずれにせよ、バンドラーはこのシナリオをサポートしていません。つまり、特定の gem を特定の環境にインストールしないように単純に指示することはできません (それらが使用されない場合でも)。(@mind.blank が提案したように) ブロックで宣言することにより、特定の gem をロードしないように指示できますgroup
が、それらは引き続きインストールされます。ただし、特定の条件が与えられたときに特定のコードのみを実行する (および特定の gem をロード/インストールする) ために、単純な ruby コンストラクト、つまりブロックを使用することはできif-else
ます。case
これに関する問題は、Gemfile.lock ファイルが展開全体で同期されなくなることです。これは、バンドラー (または Capistrano) が期待するものではありません。ただし、デプロイに Gemfile.lock ファイルを無視するように指示するために使用できるフラグがありbundle install
、本当に必要な場合は Gemfile の読み取りに基づいています...