ruby-on-rails - 部署到 Heroku 时当前 Sidekiq 作业丢失

标签 ruby-on-rails ruby heroku sidekiq

我有一个运行了一段时间的 Sidekiq 作业,当我部署到 Heroku 并且该作业正在运行时,它无法在几秒钟内完成。

这很好,因为该作业被设计为能够在需要时重新运行。

问题是作业丢失了(而不是放回 Redis 并在部署后再次运行)。

我发现建议在 heroku 上设置 :timeout: 8 我试过了,但没有效果(也试过设置为 5)。

当出现异常时,我收到错误报告,但我没有看到任何错误。所以不确定哪里出了问题。

关于如何调试这个的任何提示?

最佳答案

Sidekiq 免费版会在超时后将未完成的作业推送回 Redis,默认为 8 秒。 Heroku 为进程提供 10 秒的关闭时间。这意味着我们有 2 秒的时间将这些作业返回到 Redis ,否则它们将丢失。如果您的网络速度很慢,如果 Redis 服务器正在交换等,则可能无法满足 2 秒的截止日期并且作业会丢失。

您走在正确的 rails 上:一个答案是缩短超时时间,这样您就更有可能 catch 最后期限。但是无法预测网络或交换延迟:即使 5 秒也可能不够。

在正常的健康条件下,事情应该按设计进行。保持你的机器健康(不拥塞的网络,大量的 RAM)并且基本的获取应该运行良好。 Sidekiq Pro 的可靠获取功能从根本上重新设计了 Sidekiq 获取作业的方式,并通过将作业始终保存在 Redis 中来解决所有这些问题,以免它们丢失。但它也有严重的权衡取舍:它比“基本”获取更复杂、更慢且更依赖 Redis。

简而言之,我不知道您为什么会失业,但请确保您的实例和 Redis 服务器运行良好且延迟很低。

https://github.com/mperham/sidekiq/wiki/Using-Redis#life-in-the-cloud

关于ruby-on-rails - 部署到 Heroku 时当前 Sidekiq 作业丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555000/

相关文章:

heroku - 我正在尝试 git push heroku 但在下面遇到了同样的错误

ruby-on-rails - RoR 教程,第 7 章 - rspec 测试失败 : NoMethodError 'encrypt'

ruby-on-rails - <a> 中的 Ruby on Rails 链接标记不起作用

ruby - 如何用Nokorigi替换element?

ruby-on-rails - 如何替换字符串并保留大写?

node.js - 使用 Heroku 作为代理好吗?

ruby-on-rails - 无法在 heroku 上使用 devise 登录,所有其他环境都可以

ruby-on-rails - rake 数据库 :reset fails halfway through dropping databases

ruby-on-rails - jRuby with Rails 4的好处

ruby-on-rails - 在 Rails 中压缩目录