论坛无法访问,Unicorn 日志中出现 Redis 错误(

您好。

我正在本地机器上托管两个论坛,它们都已更新(一个为 3.4.0.beta3-dev,另一个我无法检查,因为它无法访问)。

其中一个论坛在本周早些时候更新后,大约在 2 天前突然停止工作。

登录后,每个页面都会显示“糟糕”消息。

我进入容器并查看了 unicorn 日志,似乎存在连接到 redis 的问题:

Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 3 Job exception: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) sidekiq-exception
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 2 Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:398:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:379:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:115:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:344:in `with_reconnect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:114:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:409:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:269:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:356:in `logging'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:268:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:161:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis.rb:270:in `block in send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis.rb:269:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis.rb:269:in `send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/commands/strings.rb:191:in `get'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus/backends/redis.rb:388:in `process_global_backlog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus/backends/redis.rb:277:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus/backends/redis.rb:289:in `global_subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus.rb:768:in `global_subscribe_thread'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus.rb:739:in `block in new_subscriber_thread'

问题是我看不到有什么问题,因为我可以通过 redis-cli 连接到容器中的 redis 服务器并成功设置和获取键。

我在论坛上看到了许多类似的问题,但它们要么很旧,要么没有得到任何解决。有人能帮忙吗?如果需要,我可以提供更多信息。

1 个赞

这以前能用吗?
你是什么时候开始的?
你有一个标准的 app.yml 文件有两个版本,每个版本都有自己的 Redis 和 postgres 模板以及不同的数据路径?
一种可能性是权限。在某个时候,使用的用户和组的 ID 发生了变化,但我从未在单容器设置中遇到过这个问题。

感谢您关注我的问题。

是的,这在 3 天前还能正常工作。然而,今天早上我尝试从容器内的 CLI 运行备份,但由于一个奇怪的 postgres 错误而失败,所以我怀疑数据库已损坏。这与我上面提到的错误消息完全无关,但我倾向于尝试恢复 8 天前的一个有效备份(论坛所有者对此表示同意),看看是否能解决所有问题。

我猜我可以将旧版本 Discourse 的备份恢复到新版本吗?(因为在备份和现在之间进行了一次更新。)

编辑:为了说明,这两个论坛是不同的 yaml 文件,因此每个论坛都有自己的容器来工作,并且显然有不同的数据目录。

备份时失败还是恢复时失败?

如果你实际包含那个奇怪的错误,那将非常有帮助,但如果是在恢复时失败,我怀疑它就是这里描述的那个:Restore failing with missing chat_mention function

如果确实是这样,我的建议是等待。如果不能等待,你可以尝试查看你恢复的站点是否与创建备份的站点具有相同的提交。

它在备份上。

pg_dump: error: Dumping the contents of table "posts" failed: PQgetResult() failed.
pg_dump: error: Error message from server: ERROR:  could not open file "base/16384/17044": No such file or directory

因此,我说我会先尝试恢复备份,看看是否能解决问题。 :slight_smile:

这似乎确实是一个数据库问题。

您以前恢复过文件系统备份吗?如果数据库运行时进行了文件系统备份,就会发生这种情况。这也是我不推荐文件系统备份的原因之一。

如果您想恢复 discourse 备份(我通常推荐这样做),您需要先删除数据库,然后创建一个空的数据库并迁移,之后再进行恢复。

我进行文件系统备份,但会排除 PostgreSQL 数据库,因为我会转储它们。不过,我可能忘记排除 Discourse 的文件夹了,我稍后需要检查一下。

此主题中的信息是否仍然适用于我的用例?

关于如何将备份放到需要的位置的说明似乎过于复杂。

好的,我找到问题所在了,感谢您在文件系统方面给我指明了方向。我们运行了病毒扫描,发现有人在论坛上上传了带有病毒签名文件。因此,ClamAV 将该文件移除了。我会更好地调整它,使其不再隔离 PostgreSQL 文件。

抱歉浪费了您的时间 :slight_smile:

1 个赞

太好了!很高兴我的提示有帮助!我从来没想过这一点,但我已经很久没有运行病毒软件了。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.