J'ai besoin d'exécuter une série de tâches Rake à partir d'une autre tâche Rake. Les trois premières tâches doivent être exécutées dans l'environnement de développement, mais la tâche finale doit être exécutée dans l'environnement de transfert. La tâche dépend de :environment
ce qui provoque le chargement de l'environnement de développement Rails avant l'exécution des tâches).
Cependant, j'ai besoin que la tâche finale soit exécutée dans l'environnement de transfert.
Passer un Rails_ENV=staging
L'indicateur avant d'appeler la tâche de râteau n'est pas bon car l'environnement a déjà été chargé à ce stade et tout cela ne fera que définir l'indicateur, pas charger l'environnement de transfert.
Existe-t-il un moyen de forcer une tâche de râteau dans un environnement spécifique?
J'ai déjà accompli ce genre de choses auparavant, mais pas de la manière la plus élégante:
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
Ça a toujours marché pour moi. Je serais curieux de savoir s'il y avait une meilleure façon.
La façon dont je l'ai résolu était d'ajouter une dépendance pour définir l'env Rails avant l'invocation de la tâche:
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