Rakeタスクの中でループして他のRakeタスクを呼びたくなっちゃう時ありますよね。
その時にはRake::Task#reenableを使います。
task :task_something do |t, args|
(1..10).each_with_index do |num, i|
if i == 0
Rake::Task["batch:task_something_2"].invoke(num)
else
Rake::Task["batch:task_something_2"].reenable
Rake::Task["batch:task_something_2"].invoke(num)
end
end
end
ここまで書いて面倒くさいなと調べたらexecuteでいけました
task :task_something do |t, args|
(1..10).each_with_index do |num, i|
if i == 0
Rake::Task["batch:task_something_2"].execute(number: num)
end
end
end
ただし、batch:task_something_2でActiveRecordのexecuteメソッドを使ってるとこのままでは動きません。
task task_something: :environment do |t, args|
(1..10).each_with_index do |num, i|
if i == 0
Rake::Task["batch:task_something_2"].execute(number: num)
end
end
end
environmentが無いとDB接続出来ないですね・・ハマりましたorz