順番に実行されるレーキタスクのバッチがあります。
task :batch_tasks => :environment do
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute
Rake::Task["db:seed"].execute
Rake::Task["db:test:prepare"].execute
Rake::Task["custom_task_1"].execute
end
custom_task_1の内容は次のとおりです。
task :custom_task_1 => :environment do
puts "begin custom task"
orders = Order.all #three records
orders.each do |order|
puts "Do something to Order\n"
end
puts "end custom task"
end
上記のバッチプロセスを実行すると、次のようになります。
rake batch_tasks
begin custom task
end custom task
しかし、バッチプロセスの後にカスタムタスクを実行すると、次のようになります。
rake custom_task_1
begin custom task
Do something to Order
Do something to Order
Do something to Order
end custom task
rake batch_tasks
注意すべき点の1つは、の後にブレークポイントを指定してデバッガーを実行するとrake db:seed
、チェックオンeval Order.all
すると空の配列が返されること[]
です。ただし、すべてのレーキタスクが終了した直後にOrder.all
データがあります。
rake db:seedについて何が欠けていて、次のタスクでActiveRecordデータにアクセスできるのですか?