現在Rails4のアプリケーションを5.0.07へ移行しております。
コントローラー内でスレッドからActiveRecordの呼び出しを行う
処理があるのですが、実行するとフリーズしてしまいプロセスをkillするしか
なくなるのです。
なにか対処方法はありますでしょうか?
データベースはMySQL5.6,
gemは mysql2 0.5.1
です。
ruby
1Class BookController < ApplicationController 2 3 def index 4 5 categories = Cagegory.where(del_flg: 0).index_by(&:id) 6 7 thread = Thread.new(params[:id]){|id| 8 find_book(id) 9 (略 少し重い処理) 10 } 11 (略 少し重い処理 ) 12 13 @book = thread.value 14 15 end 16 17private 18 19 def find_book(book_id) 20 21 22 Book.connection_pool.with_connection do 23 book = Book.where(id: book_id).first 24 end 25 return book 26 end 27 28 29end 30 31
転載のコードを一部訂正ました。
Railsのコンソールのログも追記します。
Started GET "/XXX/1" for 127.0.0.1 at 2018-05-25 17:35:09 +0900
Parameters: {"id"=>"1"}
Category Load (0.7ms) SELECT categories
.* FROM categories
WHERE (categories.del_flg = 0)
(ここで終了)
MySQLのgeneral logの結果も同様で
スレッド内で呼び出したクエリは実行されていませんでした。
Rails4のほぼ同じコード(移行用に一部書き換える前のもの)を同じ環境で
動かしたところ特に同じような問題は起きていません。