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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top