別のRakeタスクから一連のRakeタスクを実行する必要があります。最初の3つのタスクは開発環境で実行する必要がありますが、最後のタスクはステージング環境で実行する必要があります。タスクは:environment
に依存しているため、Rails開発環境がタスクの実行前にロードされます。
ただし、ステージング環境で実行する最後のタスクが必要です。
Rakeタスクを呼び出す前にRails_ENV=staging
フラグを渡すことは、環境がこの時点ですでにロードされており、ステージング環境をロードするのではなく、フラグを設定するだけなので、良くありません。
特定の環境でrakeタスクを強制する方法はありますか?
最もエレガントな方法ではありませんが、私は以前にこの種のことを達成しました。
task :prepare do
system("bundle exec rake ... Rails_ENV=development")
system("bundle exec rake ... Rails_ENV=development")
system("bundle exec rake ... Rails_ENV=test")
system("bundle exec rake ... Rails_ENV=test")
system("bundle exec rake ... Rails_ENV=test")
system("bundle exec rake ... Rails_ENV=test")
end
それはいつも私のために働いています。もっと良い方法があるかどうか知りたいです。
私が解決した方法は、タスクが呼び出される前にRails envを設定する依存関係を追加することでした:
namespace :foo do
desc "Our custom rake task"
task :bar => ["db:test:set_test_env", :environment] do
puts "Custom rake task"
# Do whatever here...
puts Rails.env
end
end
namespace :db do
namespace :test do
desc "Custom dependency to set test environment"
task :set_test_env do # Note that we don't load the :environment task dependency
Rails.env = "test"
end
end
end