当用户从一个特定页面移动到另一个页面时,我在 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 WARN: {"retry"=>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的情况下让它工作。但是,我必须在我的初始化程序/sidekiq.rb 中添加以下代码:
Sidekiq.configure_server do |config|
ActiveRecord::Base.connection.disconnect!
ActiveRecord::Base.configurations[Rails.env]['timeout'] = 300000
ActiveRecord::Base.establish_connection
end
我知道这是一个丑陋的解决方案,但我没有时间找到另一个解决方案来让它发挥作用。如果有人有更清洁的解决方案,请回复此主题。
谢谢!