私は2つの方法でプロジェクトをコンパイルするRakefileを持っています。グローバル変数$build_type
は:debug
または:release
にすることができます(結果は別々のディレクトリに入ります):
task :build => [:some_other_tasks] do
end
このように、プロジェクトを両方の構成で順番にコンパイルするタスクを作成したいと思います。
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
# call task :build with all the tasks it depends on (?)
end
end
それがメソッドであるかのようにタスクを呼び出す方法はありますか?それとも、どうすれば同じようなことができますか?
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
のイディオムに固執したいのなら、過去の答えからまとめたあなたの可能性はここにあります:これは常にタスクを実行しますが、依存関係は実行しません。
Rake::Task["build"].execute
これは依存関係を実行しますが、まだ呼び出されていない場合にのみタスクを実行します。
Rake::Task["build"].invoke
これは最初にタスクのalready_invoked状態をリセットして、タスクが再び実行されることを可能にします。
Rake::Task["build"].reenable
Rake::Task["build"].invoke
(既に呼び出された依存関係は再実行されません)
例えば:
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
それはあなたを整理する必要があります、ちょうど私自身が同じことを必要としていました。
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
失敗に関係なく各タスクを実行したい場合は、次のようにします。
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