ruby-on-rails 锡德基克河

ar5n3qh5  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(53)

当用户从一个特定页面移动到另一个页面时,我在Rails应用程序中使用 sidekiq 异步执行 SQL Server 数据库中的存储过程。
问题是存储过程需要4分钟才能完成,sidekiq 返回超时消息(然后重试)。
我不想在 database.yml 中更改应用程序的全局数据库超时设置(我甚至不知道它是否会解决,但我不能这样做)。
有没有办法告诉 sidekiq 我的方法可能会花很长时间,然后停止得到超时错误?
我真的很感激任何帮助。

更新#1

2013-06-03T17:14:18Z 6136 TID-1ac4ik GeneratePropertyProfile JID-de571df94f21b9159c74db6b INFO:start
2013-06- 03 T17:19:03 Z 6136 TID-1ac 4 ik GeneratePropertyProfile JID-de 571 df 94 f21 b 9159 c74 db 6 b信息:失败:285.218秒
2013-06-03T17:19:03Z 6136 TID-1ac4ik警告:{“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- 03 T17:19:03 Z 6136 TID-1ac 4 ik WARN:TinyTds::Error:Adaptive Server连接超时:EXEC gaiainc.sp_wait

更新#2

我让它工作,而不改变我的 * 数据库.yml*。然而,我必须在我的初始化器/sidekiq.rb中添加以下代码:

Sidekiq.configure_server do |config|
  ActiveRecord::Base.connection.disconnect!
  ActiveRecord::Base.configurations[Rails.env]['timeout'] = 300000
  ActiveRecord::Base.establish_connection
end

字符串
我知道这是一个丑陋的解决方案,但我没有时间找到另一个解决方案,使其工作。如果有人有一个更干净的解决方案,请回复这个主题。
谢谢你,谢谢

epggiuax

epggiuax1#

$TERM表示Sidekiq应该在-t超时选项内关闭。任何在超时内没有完成的工作进程都将被强制终止,其消息将丢失。超时默认为25秒
Sidekiq TERM超时在config/sidekiq.yml中设置或使用-t参数设置。当Sidekiq接收到TERM时,它将尽可能在此超时之前退出。

:timeout: 300

字符串

相关问题