ruby on rails - que - Forzar la tarea de rake para ejecutar en un entorno de Rails específico
ruby on rails tutorial español (2)
He logrado este tipo de esto antes, aunque no de la manera más elegante:
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
Siempre me ha funcionado. Tendría curiosidad por saber si había una mejor manera.
Necesito ejecutar una serie de tareas de Rake desde otra tarea de Rake. Las tres primeras tareas deben ejecutarse en el entorno de desarrollo, pero la tarea final debe ejecutarse en el entorno de ensayo. La tarea depende de :environment
que hace que el entorno de desarrollo de Rails se cargue antes de que se ejecuten las tareas.
Sin embargo, necesito que la tarea final se ejecute en el entorno de ensayo.
Pasar un RAILS_ENV=staging
antes de invocar la tarea de RAILS_ENV=staging
no es bueno, ya que el entorno ya se ha cargado en este punto y todo esto hará que se establezca la bandera, no se cargue el entorno de prueba.
¿Hay alguna manera de forzar una tarea de rake en un entorno específico?
La forma en que lo resolví fue agregar una dependencia para configurar los rieles env antes de invocar la tarea:
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