質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1533閲覧

Rails 4.2 rollback transaction

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2015/05/28 06:44

編集2015/05/29 01:14

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問