Sidekiq 未运行。Sidekiq 心跳测试失败,正在重启

我在想是否可以通过刷新 Redis 或更新它来解决这个问题;它最近 8 个多月几乎没动过。我本人之前没有处理过 Redis,但我们的 Tests-Pass Discourse 实例是使用 local_discourse 搭建的,而不是本论坛现在推荐的 Discourse Docker。我遇到的问题与无法向用户发送邮件有关。欢迎提供任何帮助和建议!

Sidekiq 未运行。许多任务(如发送邮件)由 Sidekiq 异步执行。请确保至少有一个 Sidekiq 进程正在运行。

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

config/unicorn.conf.rb:147:in `check_sidekiq_heartbeat
config/unicorn.conf.rb:164:in `master_sleep'
unicorn-5.5.4/lib/unicorn/http_server.rb:296:in `join'
unicorn-5.5.4/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

如果迁移是合理的,我很乐意听取建议。

建议您备份当前安装,并按照 Discourse 官方标准安装 创建一个全新的安装。

这一建议至少已经持续了四年。

我附议 Rafael 的建议。

我使用 launcher 重新构建或重启 Redis 容器会有帮助吗?

用法:launcher 命令 配置 [–skip-prereqs] [–docker-args 字符串]
命令:
start: 启动/初始化容器
stop: 停止正在运行的容器
restart: 重启容器
destroy: 停止并删除容器
enter: 打开 Shell 以在容器内运行命令
logs: 查看容器的 Docker 日志
bootstrap: 基于模板为配置引导容器
run: 在上一次引导的镜像上下文中,使用配置运行给定命令
rebuild: 重新构建容器(销毁旧容器、引导、启动新容器)
cleanup: 删除所有已停止超过 24 小时的容器
start-cmd: 生成用于启动容器的 Docker 命令

选项:
–skip-prereqs 不检查 launcher 的先决条件
–docker-args 运行 Docker 时传递的额外参数
–skip-mac-address 不分配 MAC 地址
–run-image 覆盖用于运行容器的镜像

您是按照 Discourse 官方标准安装 指南安装的,还是通过其他方式安装的?如果是标准安装,那么运行 ./launcher rebuild app 很可能就能解决您的问题。

还没有,但我们正在安排迁移时间。我们的 Discourse 已经运行了将近三年,我只是不想增加任何不必要的停机时间。:slight_smile: 我们的实例完全由志愿者维护,因此过去一个月我一直在自学如何维护它。如果快速修复 Redis 会有帮助(该容器已运行一年未动),我很乐意应用它。

如果您最初没有进行标准安装,那么谁能知道什么能解决您当前的问题呢。

我建议先设置一个新的虚拟机,并在其中进行测试安装以确保其正常运行。在进行迁移时,您可以将旧论坛设置为只读模式,进行备份,然后将其恢复到新虚拟机上,并更改 DNS,从而实现几乎零停机时间。(实际上会有一点停机时间,因为更改 DNS 后,您需要重新构建以安装 Let’s Encrypt 证书)

谢谢,Let’s Encrypt 实际上应该很容易,因为它已被配置为只需编辑简单的 Nginx 反向代理。听到这个消息很好,但请预期会有一些停机时间。只需将其安排在非高峰时段即可。

我即将进行迁移,并将备份恢复到官方镜像中。关于清理已备份的邮件等内容,有什么需要特别注意的吗?以免在 Sidekiq 等组件正常运行后给用户造成垃圾信息骚扰。谢谢!

Sidekiq 作业队列无法迁移,因此大量邮件将被丢弃,而摘要邮件将恢复正常发送。

因此,在尝试按照官方 Discourse Docker 镜像的文档进行安装时遇到了问题。我们得出结论,我们缺少之前在 Docker 中拥有的 Redis 容器、邮件接收容器和数据容器。

看来我们之前的安装包含:
app.yml
data.yml
mail-receiver.yml
redis.yml

这种多容器设置与基本安装说明不同。我确实有旧版 /var/discourse 的备份可供参考。

FAILED                                                                                                                                                        │················································································································
--------------------                                                                                                                                          │················································································································
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 645 exit 1>                 │················································································································
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'                                                                                            │················································································································
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}                                   │················································································································
bbf0e57ac69f1febe2a5f149aa7e6e12541c3c23aaf199188fdf19d507254b58                                                                                              │················································································································
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.                                                   │················································································································
./discourse-doctor may help diagnose the problem.

看起来我们漏掉了步骤 ./launcher bootstrap data
./launcher start redis

[Mon 11 May 2020 12:53:20 AM UTC] 运行重载命令:sv reload nginx                                                                                             │················································································································
fail: nginx: runsv 未运行                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:20 AM UTC] 重载错误:                                                                                                          │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 域名未更改。                                                                                                        │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 跳过,下次续期时间为:Thu 09 Jul 2020 11:33:04 PM UTC                                                                 │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 添加 '--force' 以强制续期。                                                                                            │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 正在安装密钥至:/shared/ssl/discuss.noisebridge.info_ecc.key                                                              │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 正在安装完整证书链至:/shared/ssl/discuss.noisebridge.info_ecc.cer                                                       │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 运行重载命令:sv reload nginx                                                                                             │················································································································
fail: nginx: runsv 未运行                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] 重载错误:                                                                                                          │················································································································
run-parts: 正在执行 /etc/runit/1.d/remove-old-socket                                                                                                         │················································································································
runsvdir 已启动,PID 为 626                                                                                                                                  │················································································································
ok: run: redis: (pid 636) 0s                                                                                                                                  │················································································································
chgrp: 无效的用户组:'syslog'                                                                                                                                │················································································································
ok: run: postgres: (pid 639) 0s                                                                                                                               │················································································································
rsyslogd: imklog: 无法打开内核日志 (/proc/kmsg):操作不允许。                                                                               │················································································································
rsyslogd: imklog 模块激活失败 [v8.1901.0 请查看 https://www.rsyslog.com/e/2145 ]                                                                  │················································································································
supervisor pid: 640 unicorn pid: 667

好的,我们已成功恢复之前的 Discourse 实例!现在显示:

所有出站邮件已被管理员全局禁用。将不会发送任何类型的电子邮件通知。

没错,导入器已进行此设置,以防止您在迁移后一次性发送 50,000 封邮件。请在您的站点设置中谨慎开启电子邮件功能。