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
Alternativement, vous pouvez rendre la tâche à une autre tâche dépend comme je l'ai fait ci-dessus avec :create
selon clients:creation:checks
. Pour clarifier, un espace de noms est pour les tâches de regroupement, vous devez donc réellement définir les tâches dans l'espace de noms comme je l'ai indiqué ci-dessus. Vous ne pouvez pas simplement appeler des tâches depuis un espace de noms.
donc votre code ci-dessus doit ê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
Merci! C'était invoqué! – Amir
pourquoi 'invoke', puis-je utiliser' execute' signifie 'execute (client)' –
@AMICMING - 'execute' n'exécutera que la tâche tandis que' invoke' exécutera toutes les dépendances. En outre, il exécutera uniquement la tâche si nécessaire. * Note: C'était le cas il y a 8 ans; Honnêtement, je ne sais pas si cela a changé depuis. * Http://chrisroos.co.uk/blog/2007-12-06-ruby-rake-invoke-vs-execute –