J'ai un Rakefile qui compile le projet de deux manières, en fonction de la variable globale $build_type
, qui peut être :debug
ou :release
(les résultats sont placés dans des répertoires séparés):
task :build => [:some_other_tasks] do
end
Je souhaite créer une tâche qui compile le projet avec les deux configurations, à peu près comme ceci:
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
# call task :build with all the tasks it depends on (?)
end
end
Existe-t-il un moyen d'appeler une tâche comme s'il s'agissait d'une méthode? Ou comment puis-je obtenir quelque chose de similaire?
task :build => [:some_other_tasks] do
build
end
task :build_all do
[:debug, :release].each { |t| build t }
end
def build(type = :debug)
# ...
end
rake
, voici vos possibilités, compilées à partir de réponses antérieures:Ceci exécute toujours la tâche, mais n'exécute pas ses dépendances:
Rake::Task["build"].execute
Celui-ci exécute les dépendances, mais n'exécute la tâche que si elle n'a pas déjà été invoquée:
Rake::Task["build"].invoke
Ceci réinitialise d'abord l'état déjà invoqué de la tâche, permettant ainsi à la tâche d'être exécutée à nouveau, dépendances et tout:
Rake::Task["build"].reenable
Rake::Task["build"].invoke
(Notez que les dépendances déjà invoquées ne sont pas ré-exécutées)
par exemple:
Rake::Task["db:migrate"].invoke
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
Rake::Task["build"].reenable
Rake::Task["build"].invoke
end
end
Cela devrait vous aider, j'avais juste besoin de la même chose moi-même.
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
Rake::Task["build"].execute
end
end
task :invoke_another_task do
# some code
Rake::Task["another:task"].invoke
end
Si vous souhaitez que chaque tâche soit exécutée indépendamment des échecs, vous pouvez effectuer les opérations suivantes:
task :build_all do
[:debug, :release].each do |t|
ts = 0
begin
Rake::Task["build"].invoke(t)
rescue
ts = 1
next
ensure
Rake::Task["build"].reenable # If you need to reenable
end
return ts # Return exit code 1 if any failed, 0 if all success
end
end