Задание командной строки для запуска в специальной среде Rails
Мне нужно запустить ряд задач Rake из другой задачи Rake. Первые три задачи необходимо запускать в среде разработки, но конечная задача должна выполняться в промежуточной среде. Задача имеет зависимость от :environment
, которая заставляет среду разработки Rails загружаться до запуска задач.
Однако мне нужна последняя задача, которая будет выполнена в промежуточной среде.
Передача флага RAILS_ENV=staging
перед вызовом задачи rake не подходит, поскольку среда уже загружена в этот момент, и все это будет сделано, это установить флаг, а не загружать промежуточную среду.
Есть ли способ заставить команду rake в определенной среде?
Ответы
Ответ 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