我需要从另一个Rake任务运行一系列Rake任务。前三个任务需要在开发环境中运行,但最终任务需要在登台环境中运行。该任务依赖于:environment
,这导致在任务运行之前加载Rails开发环境。
但是,我需要在暂存环境中执行最终任务。
在调用rake任务之前传递RAILS_ENV=staging
标志是不好的,因为此时已经加载了环境,所有这一切都将设置标志,而不是加载登台环境。
我是否可以在特定环境中强制执行rake任务?
答案 0 :(得分:17)
我之前已经完成了这种方式,尽管不是最优雅的方式:
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
它总是对我有用。我很想知道是否有更好的方法。
答案 1 :(得分:14)
我解决它的方法是在调用任务之前添加一个依赖项来设置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