Rails アプリでsidekiqを使用して、ユーザーがある特定のページから別のページに移動したときに、 SQL Serverデータベースでストアド プロシージャを非同期的に実行しています。
問題は、ストアド プロシージャが完了するまでに最大 4 分かかり、sidekiqがタイムアウト メッセージを返す (そして再試行する) ことです。
database.yml でアプリケーションのグローバル データベース タイムアウト設定を変更したくありません(解決するかどうかさえわかりませんが、それを行うことはできません)。
メソッドに時間がかかる可能性があることをsidekiqに伝えてから、タイムアウトエラーが発生しないようにする方法はありますか?
どんな助けでも本当に感謝しています。
更新 #1
2013-06-03T17:14:18Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b 情報: 開始
2013-06-03T17:19:03Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b 情報: 失敗: 285.218 秒
2013-06-03T17:19:03Z 6136 TID-1ac4ik 警告: {"再試行"=>true、"queue"=>"default"、"class"=>"GeneratePropertyProfile"、"args"=>[{"id "=>41915658}], "jid"=>"de571df94f21b9159c74db6b", "error_message"=>"TinyTds::Error: Adaptive Server 接続がタイムアウトしました: EXEC gaiainc.sp_wait", "error_class"=>"ActiveRecord::StatementInvalid" 、「failed_at」=>2013-06-03 17:19:03 UTC、「retry_count」=>0}
2013-06-03T17:19:03Z 6136 TID-1ac4ik 警告: TinyTds::Error: Adaptive Server 接続がタイムアウトしました: EXEC gaiainc.sp_wait
更新 #2
database.ymlを変更せずに動作するようになりました。ただし、initializers/sidekiq.rb に次のコードを追加する必要がありました。
Sidekiq.configure_server do |config|
ActiveRecord::Base.connection.disconnect!
ActiveRecord::Base.configurations[Rails.env]['timeout'] = 300000
ActiveRecord::Base.establish_connection
end
私はそれが醜い解決策であることを知っていますが、それを機能させるための別の解決策を見つける時間がありませんでした. 誰かがよりクリーンな解決策を持っている場合は、このトピックに返信してください。
ありがとうございました!