我在我的Rails应用中使用sidekiq来异步执行存储过程,该存储过程在用户从一个特定页面转移到另一个页面时会被执行。但问题是,这个存储过程需要4分钟才能完成,sidekiq返回一个超时消息(然后重试)。我不想改变database.yml中全局数据库超时设置(我甚至不知道它是否有效,但我不能这样做)。有没有办法告诉sidekiq我的方法可能需要很长时间,然后停止出现超时错误?非常感谢任何帮助。
更新#1:
2013-06-03T17:14:18Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b INFO: 开始
2013-06-03T17:19:03Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b INFO: 失败:285.218秒
2013-06-03T17:19:03Z 6136 TID-1ac4ik WARN: {"retry"=>true, "queue"=>"default", "class"=>"GeneratePropertyProfile", "args"=>[{"id"=>41915658}], "jid"=>"de571df94f21b9159c74db6b", "error_message"=>"TinyTds::Error: Adaptive Server connection timed out: 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 WARN: TinyTds::Error: Adaptive Server connection timed out: EXEC gaiainc.sp_wait
更新#2:
我成功地在不改变database.yml的情况下使其工作。但是,我必须在我的initializers/sidekiq.rb中添加以下代码:
更新#1:
2013-06-03T17:14:18Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b INFO: 开始
2013-06-03T17:19:03Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b INFO: 失败:285.218秒
2013-06-03T17:19:03Z 6136 TID-1ac4ik WARN: {"retry"=>true, "queue"=>"default", "class"=>"GeneratePropertyProfile", "args"=>[{"id"=>41915658}], "jid"=>"de571df94f21b9159c74db6b", "error_message"=>"TinyTds::Error: Adaptive Server connection timed out: 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 WARN: TinyTds::Error: Adaptive Server connection timed out: 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
我知道这不是一个美观的解决方案,但我没有时间找到其他解决方案来使它工作。
如果有人有更清晰的解决方案,请在此主题中回复。
谢谢!