强制Rake任务在特定的Rails环境中运行

时间:2014-02-04 13:46:57

标签: ruby-on-rails ruby ruby-on-rails-3 rake

我需要从另一个Rake任务运行一系列Rake任务。前三个任务需要在开发环境中运行,但最终任务需要在登台环境中运行。该任务依赖于:environment,这导致在任务运行之前加载Rails开发环境。

但是,我需要在暂存环境中执行最终任务。

在调用rake任务之前传递RAILS_ENV=staging标志是不好的,因为此时已经加载了环境,所有这一切都将设置标志,而不是加载登台环境。

我是否可以在特定环境中强制执行rake任务?

2 个答案:

答案 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