Sidekiq 心跳测试失败,正在重启

同样的问题出现在最新版本更新后,除了通过重建进行更新外没有任何其他更改,管理面板显示 Sidekiq 未运行。我将 PostgreSQL 和 Redis 放在一个容器中,应用放在另一个容器中,并且已经再次重启了所有容器。队列中有几百条任务,但没有任何处理。

编辑1:清空所有队列并没有解决问题或带来任何帮助,队列又开始填充,但仍然没有处理。

编辑2:重新构建了论坛,经历了所有相关的停机时间,但依然显示此消息:

并且 /sidekiq 中的队列也没有处理。在从 beta7 更新到 2.4.0.beta9 之前,一切运行正常。

编辑3:可用空间超过 50GB。手动运行备份(接近 300MB)成功完成,系统显示暂停和恢复 Sidekiq,日志中未报告任何错误,但 Sidekiq 似乎仍未运行?

编辑4:/logs 中唯一值得注意的日志是不断重复的 Sidekiq heartbeat test failed, restarting

编辑5:Redis 似乎正常运行,至少它的日志文件正忙着显示它没什么可做的……为了明确起见:

[3] pry(main)> Sidekiq.paused?
=> false

编辑6:我稍早前清除了队列,现在又有 10 个任务排队但未处理。

编辑7:发现 bundle exec sidekiq 是在普通项目中启动 Sidekiq 的常规方式,所以让我们尝试运行它看看会发生什么:

root@vps198273-forum:/var/www/discourse# bundle exec sidekiq
2020-01-06T05:10:18.814Z pid=31242 tid=gn383wxbu INFO: Booting Sidekiq 6.0.4 with redis options {:host=>"forum-data", :port=>6379, :namespace=>"sidekiq", :id=>"Sidekiq-server-PID-31242", :url=>nil}
You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.4/lib/sidekiq/cli.rb:62:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.4/bin/sidekiq:12:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.4/lib/sidekiq/cli.rb:62:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.4/bin/sidekiq:12:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/sidekiq:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/sidekiq:23:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

您正在连接 Redis v3.0.6,但 Sidekiq 需要 Redis v4.0.0 或更高版本

嗯,这看起来很有趣?让我们尝试重建数据容器,并祈祷不要碰到数据,哈哈……

编辑8:看来 Redis 正在运行 5.0.5 版本(为什么这里不使用 PostgreSQL 的 pubsub 功能呢?),这肯定高于 4.0.0……重建已完成,测试论坛,数据似乎仍然存在,并且我们看到了一个峰值!


看起来已修复!也许这篇帖子会对某些人有帮助。我希望论坛能直接告诉我 Sidekiq 报错说 Redis 版本过旧,但我猜这些日志可能只是被丢到某个地方去了,因为我没在任何地方看到它们。:slight_smile: