Подтвердить что ты не робот

Задание командной строки для запуска в специальной среде Rails

Мне нужно запустить ряд задач Rake из другой задачи Rake. Первые три задачи необходимо запускать в среде разработки, но конечная задача должна выполняться в промежуточной среде. Задача имеет зависимость от :environment, которая заставляет среду разработки Rails загружаться до запуска задач.

Однако мне нужна последняя задача, которая будет выполнена в промежуточной среде.

Передача флага RAILS_ENV=staging перед вызовом задачи rake не подходит, поскольку среда уже загружена в этот момент, и все это будет сделано, это установить флаг, а не загружать промежуточную среду.

Есть ли способ заставить команду rake в определенной среде?

4b9b3361

Ответ 1

Я уже делал это раньше, хотя и не в самых изящных вариантах:

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

Это всегда сработало для меня. Мне было бы интересно узнать, есть ли лучший способ.

Ответ 2

То, как я решил, это добавить зависимость для установки 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