恢复特定的 discourse 备份版本

我有一个小型 Discourse 论坛运行了好几年,效果很好。我设置了自动备份,但很长时间没有更新 Discourse 版本了。

服务器坏了,但我有备份。备份是来自大约 2 年前的旧 Discourse 版本。当我尝试安装最新版本并从备份恢复时,它不起作用。当我尝试安装旧版本时,这是不可能的:设置脚本会自动拉取新的提交和最新的 Docker 镜像,我甚至在启动脚本中找到了这些行并删除了它们,但 Docker 镜像中的一些内部代码也会检查并更新到最新版本。

我该怎么办?如何运行旧的 Discourse 版本或在新版本上恢复旧备份?

如果您想获得帮助,您需要更具体一些。它应该可以工作。很有可能,如果您能够安装与您当时拥有的相同版本的 Discourse,问题也将无法解决。

您在尝试恢复时收到了什么错误?

./launcher logs app 输出中没有关键错误,但论坛无法运行。几乎所有的按钮都无法运行,没有主题,并且 HTML 看起来很奇怪(有 bug 的起始页重复出现,并且可以无限滚动到底部)。

我不是专业技术人员,希望您能告诉我可以在报告中添加哪些日志,以及在哪里可以找到它们。

有人知道在哪里可以找到可靠的日志吗?

您的论坛的 /logs 路由有错误吗?

问题是我无法访问 /logs - “此页面不存在或为私有”。并且我无法登录进行检查。

尝试使用 https://forum.example.com/u/admin-login 处的 管理员登录 页面[1]


  1. 你每天都能学到新东西! ↩︎

谢谢链接,但它不起作用。它会发送电子邮件,但我没有 smtp 服务器,并且正在使用此插件:Disable Email Verification for Discourse Plugin

也许,服务器上的一些控制台命令可以检查发生了什么?

据我所知,那个插件坏了。你可能不想用它。

1 个赞

当我创建服务器时,没有其他方法可以让用户在没有电子邮件确认的情况下创建帐户。

也许现在它坏了,但我至少在尝试恢复论坛的旧版本。

1 个赞

目前我无法访问论坛的任何数据,即使我有备份。只显示论坛徽标和标签,并且所有按钮都无法使用。

1 个赞

哎呀,这让事情变得复杂了。你能尝试按照这里的说明来获取一些日志吗?

您尝试过安全模式吗?

并注释掉损坏的插件,以及可能存在的其他插件。一旦您让任何东西正常工作,就可以将它们重新添加回来。

Rails production logs 不包含关键错误,product_errors.log 为空。

Unicorn 错误日志 unknown OID 17246: failed to recognize type of 'embeddings'. It will be treated as String. Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 2 EOFError subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:103:in `rescue in read' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:94:in `read' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:535:in `next_event' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:66:in `subscription' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:17:in `subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:175:in `_subscription' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/pubsub.rb:17:in `subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:293:in `global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread' Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 heartbeat: Connection refused - connect(2) for 127.0.0.1:6379 Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) sidekiq-exception Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 2 Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) subscribe failed, reconnecting in 1 second. Call stack /usr/local/lib/ruby/3.3.0/socket.rb:1219:in `__connect_nonblock' /usr/local/lib/ruby/3.3.0/socket.rb:1219:in `connect_nonblock' /usr/local/lib/ruby/3.3.0/socket.rb:60:in `connect_internal' /usr/local/lib/ruby/3.3.0/socket.rb:141:in `connect' /usr/local/lib/ruby/3.3.0/socket.rb:647:in `block in tcp' /usr/local/lib/ruby/3.3.0/socket.rb:231:in `each' /usr/local/lib/ruby/3.3.0/socket.rb:231:in `foreach' /usr/local/lib/ruby/3.3.0/socket.rb:637:in `tcp' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:120:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/connection_mixin.rb:11:in `reconnect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:769:in `block in connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/middlewares.rb:12:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:768:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:759:in `raw_connection' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:719:in `ensure_connected' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:314:in `call_v' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/client.rb:90:in `call_v' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:152:in `block in send_command' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `synchronize' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `send_command' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/strings.rb:191:in `get' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:366:in `process_global_backlog' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:279:in `block in global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:291:in `global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread' unknown OID 17246: failed to recognize type of 'embeddings'. It will be treated as String.

Sidekiq logs 为空。

Nginx 日志没有问题。

我在 Unicorn 日志中看到 Redis 连接问题,但 Redis 日志本身没有错误:

9706:C 28 Aug 2025 15:11:25.025 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:11:25.106 * Background saving terminated with success 881:M 28 Aug 2025 15:16:26.096 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:16:26.097 * Background saving started by pid 10037 10037:C 28 Aug 2025 15:16:26.109 * DB saved on disk 10037:C 28 Aug 2025 15:16:26.109 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:16:26.198 * Background saving terminated with success 881:M 28 Aug 2025 15:21:27.004 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:21:27.004 * Background saving started by pid 10365 10365:C 28 Aug 2025 15:21:27.019 * DB saved on disk 10365:C 28 Aug 2025 15:21:27.019 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:21:27.105 * Background saving terminated with success 881:M 28 Aug 2025 15:26:28.030 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:26:28.031 * Background saving started by pid 10703 10703:C 28 Aug 2025 15:26:28.050 * DB saved on disk 10703:C 28 Aug 2025 15:26:28.051 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:26:28.132 * Background saving terminated with success 881:M 28 Aug 2025 15:31:29.094 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:31:29.095 * Background saving started by pid 11028 11028:C 28 Aug 2025 15:31:29.109 * DB saved on disk 11028:C 28 Aug 2025 15:31:29.110 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:31:29.196 * Background saving terminated with success

Postgresql 日志没有错误。

如何启用它?

抱歉。我输入了“safe-mode”而不是“safe mode”,而且没有注意到它没有自动链接。

谢谢,这很有帮助,论坛也正常工作了(虽然不是完美运行,但我可以访问带有上下文的主题)。

然而,论坛在安全模式下是无法使用的,而且我不太记得我安装了哪些插件。插件列表应该在 app.yml 中,但是服务器已经损坏了,我只有备份,据我所知,备份中不包含 app.yml。我该如何恢复论坛并移除损坏的插件?

不使用现有的 app.yml 进行恢复不应安装除捆绑插件(全部为官方插件)之外的任何插件。

但是,主题和主题组件包含在备份中,因此请尝试禁用它们。

尝试使用安全模式并仅禁用主题和组件,以确保您的问题是由其中一个引起的。

2 个赞

谢谢,它确实在没有主题的情况下起作用,但我可以在哪里找到主题?在备份中,我只看到两个项目:dump.sql.gz 和 uploads 文件夹,其中只包含用户媒体和文件。

您可以通过管理界面访问主题。您可以先全部禁用,然后逐个启用(或其他方式)。

1 个赞