【问题标题】:Sidekiq TimeoutSidekiq 超时
【发布时间】:2013-05-29 15:40:40
【问题描述】:

当用户从一个特定页面移动到另一个页面时,我在我的 Rails 应用程序中使用 sidekiq 来异步执行我的 SQL Server 数据库中的存储过程。 p>

问题是存储过程最多需要 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

我知道这是一个丑陋的解决方案,但我没有时间找到另一个解决方案来让它发挥作用。 如果有人有更干净的解决方案,请回复此主题。

谢谢!

【问题讨论】:

    标签: ruby-on-rails sidekiq


    【解决方案1】:

    TERM 表示 Sidekiq 应该在 -t 超时选项内关闭。任何未在超时内完成的工作人员都将被强制终止,并且他们的消息会丢失。超时默认为 8 秒

    Sidekiq TERM 超时设置在 config/sidekiq.yml 或使用 -t 参数。 Sidekiq 在收到 TERM 时会尽力在此超时之前退出。

    :timeout: 300
    

    【讨论】:

    • 我尝试将超时设置放在 config/sidekiq.yml 中,但问题仍然存在。我将超时设置为 300,并调用了一个睡眠时间为 285 秒的存储过程,sidekiq 不断向我抛出超时错误。
    • 查看我上次发布的更新:这是 sidekiq 的输出。在 285 秒内,我的存储过程(以及我的 perform 方法)完成了,但 sidekiq 说该方法失败了。
    • 问题是数据库适配器超时,而不是sidekiq。我让它可以更改 database.yml 中的数据库超时设置,但是我无法将我的生产数据库超时设置更改为 300000 毫秒。有什么想法吗?
    • 好吧,如果无法更改数据库参数,我建议您检查是否可以简化或优化数据库请求。也许您正在对每个项目的大量集合进行一些更新,可以将其替换为带有连接的更新,或者将大量项目插入一个,并且只需一个请求即可插入它们。需要更多信息...
    • 我可以优化我的数据库请求(不多),但不幸的是我现在没有时间去做。我使用了一个丑陋的(我认为)解决方案来使其工作 - 检查我的帖子更新。
    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 2023-01-31
    • 2016-05-30
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多