La combinaison de nombreuses tâches de râteau dans une tâche de râteau
-
19-09-2019 - |
Question
Au lieu d'exécuter individuellement chaque tâche Rake comme ceci:
rake db:drop
rake db:create
rake db:migrate
rake db:load
Je veux exécuter une tâche de râteau qui fait tout pour.
est ce que j'ai pour mon rakefile:
desc 'This rebuilds development db'
namespace :rebuild_dev do
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute
Rake::Task["db:load"].execute
end
Le dessus ne fonctionne pas quand je le lance.
La solution
Vous voulez invoke
pas execute
. Un petit extrait de mon propre code montrant comment passer des variables:
namespace :clients do
task :create, [:client] => ["clients:creation:checks"] do |t, args|
Rake::Task["clients:creation:git"].invoke(client, password)
Rake::Task["server:virtualhost:create"].invoke(client)
Rake::Task["server:virtualhost:enable"].invoke(client)
Rake::Task["server:reload"].invoke
Rake::Task["db:roles:create"].invoke(client, password)
Rake::Task["db:create"].invoke(client, client)
Rake::Task["db:migrate"].invoke(client)
end
end
Vous pouvez rendre la tâche dépend une autre tâche comme je l'ai fait ci-dessus avec :create
selon clients:creation:checks
.
Juste pour clarifier, un espace de noms est pour les tâches de regroupement, vous devez donc définir réellement les tâches au sein de l'espace de noms que j'ai ci-dessus. Vous ne pouvez pas simplement appeler des tâches à partir d'un espace de noms.
ci-dessus donc votre code devrait être:
desc 'This rebuilds development db'
task :rebuild_dev do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
Autres conseils
Vous pouvez le faire avec dépendances sur une tâche sans corps.
desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]
namespace :rebuild_dev do
desc 'This rebuilds development db'
task :clean_slate => :environment do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
end