clockworkを使って定期処理を実装したのですが、トランザクションロールバックしてしまいます。処理自体はちゃんと動いています。どうすれば直るでしょうか
ログ
lang
1 (0.1ms) begin transaction 2 (0.1ms) rollback transaction 3 (0.3ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:10:36.818442') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 4 (0.1ms) begin transaction 5 (0.1ms) rollback transaction 6 (0.3ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:11:36.916917') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 7 (0.2ms) begin transaction 8 (0.1ms) rollback transaction 9 (0.2ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:12:36.602979') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 10 (0.1ms) begin transaction 11 (0.2ms) rollback transaction 12 (0.3ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:13:36.908669') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 13 (0.1ms) begin transaction 14 (0.1ms) rollback transaction 15 (0.4ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:13:44.742769') AND "items"."trade" = 'f' AND "items"."limit_check" = 'f' 16 (0.1ms) begin transaction 17 (0.1ms) rollback transaction 18 (0.2ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:14:36.719051') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 19 (0.2ms) begin transaction 20 (0.1ms) rollback transaction 21 (0.2ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:15:36.733665') AND "items"."trade" = 't' AND "items"."limit_check" = 'f' 22 (0.3ms) begin transaction 23 (0.1ms) rollback transaction 24 (0.3ms) SELECT COUNT(*) FROM "items" WHERE "items"."deleted_at" IS NULL AND ("items"."limit_day" BETWEEN '2013-12-24 00:00:00.000000' AND '2015-05-28 17:16:36.400022') AND "items"."trade" = 't' AND "items"."limit_check" = 'f'
lib/tasks/item.rake
lang
1 2 3namespace :item do 4 desc "TODO" 5 6 7 #該当するアイテムの取引ナビ作成 8 task trade_limit_end_item_check: :environment do 9 #(limit_day: Time.now-120..Time.now) 10 no_check_item = Item.where(limit_day: Time.mktime(2014, 12, 24, 00, 00, 00).prev_year..Time.now, trade: true, limit_check: false) 11 12 13 if no_check_item.count > 0 14 Item.transaction do 15 no_check_item.find_each do |item| 16 #権利者 17 warrant = Warrant.find_by(item_id: item.id) 18 19 #取引ナビ生成 20 navi = Navi.create(exhibitor_id: item.user_id, proprietor_id: warrant.holder_id, item_id: item.id, status: false, score_judge: true, score_body:'') 21 22 #取引ナビお知らせ 23 Todo.create(exhibitor_id: item.user_id, proprietor_id: warrant.holder_id, item_id: item.id, navi_id: navi.id, body_num: 90000, status: false) 24 25 #アイテムタイムリミットチェックフラグ 26 item.update({limit_check: true, phase: 20000}) 27 end 28 end 29 end 30 end 31 32 33 #アイテムタイムリミッチェック 34 task limit_day_check: :environment do 35 #(limit_day: Time.now-120..Time.now) 36 limit_day_end_item = Item.where(limit_day: Time.mktime(2014, 12, 24, 00, 00, 00).prev_year..Time.now, trade: false, limit_check: false) 37 38 if limit_day_end_item.count > 0 39 Item.transaction do 40 limit_day_end_item.find_each do |item| 41 42 #アイテムタイムリミットチェックフラグ 43 item.update({limit_check: true, phase: 10010}) 44 45 end 46 end 47 end 48 end 49end
lib/clock.rb
lang
1require 'clockwork' 2include Clockwork 3 4every(60.second, 'trade_limit_end_item_check.job') do 5 puts `rake item:trade_limit_end_item_check` 6end 7 8 9every(300.second, 'limit_day_check.job') do 10 puts `rake item:limit_day_check` 11end 12
あなたの回答
tips
プレビュー