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

Und*_*ion 25 ruby rake ruby-on-rails ruby-on-rails-3

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

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

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

有没有办法可以在特定环境中强制执行rake任务?

kdd*_*isz 19

我之前已经完成了这种方式,尽管不是最优雅的方式:

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
Run Code Online (Sandbox Code Playgroud)

它总是对我有用.我很想知道是否有更好的方法.


Mat*_*rtz 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 
Run Code Online (Sandbox Code Playgroud)