Discourse 挂起,Discourse 恢复失败

我运行了命令 ./launcher rebuild app


redis is now ready to exit, bye bye ... 导致 Discourse 卡住——已持续 40 分钟,最终通过 Ctrl + C 终止。

它一直在加载。结果是我们未能创建新容器。能否说明一下 Discourse 中哪些日志可以帮助我们查找原因?

这是否可能是资源分配问题?

此服务器上是否还托管有其他网站或服务?您的服务器有多少可用内存和 CPU?

服务器资源

这是正常的。

这就不正常了。通常在该消息出现后不到一分钟,新容器就会启动。

你是多次尝试后都得到相同的结果吗?

是的,多次尝试,结果相同。

之前在分支 3d050bdaa31633a954758894629c0eb9fea537d0 上运行

想要升级到 fe71c43c57c0248a8264245cb6ff0dc114da335a

结果导致 Discourse 卡死!!

production.log

在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH) 订阅失败,将在 1 秒后重新连接。调用栈 ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:363:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:344:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:307:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:382:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:320:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:139:in `block in call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:293:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:138:in `call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/subscribe.rb:44:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/subscribe.rb:13:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:3468:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:2301:in `block in subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:2300:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:287:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:741:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:689:in `block in new_subscriber_thread'"]
作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH) 订阅失败,将在 1 秒后重新连接。调用栈 ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:363:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:344:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:307:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:382:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:320:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:125:in `call'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:915:in `block in get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:914:in `get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:360:in `process_global_backlog'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:271:in `block in global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:284:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:741:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:689:in `block in new_subscriber_thread'"]
作业异常:在 localhost:6379 连接 Redis 时出错 (Errno::ENETUNREACH)

创建作用域 :visible_groups。正在覆盖现有方法 Group.visible_groups。
创建作用域 :visible。正在覆盖现有方法 Notification.visible。
创建作用域 :public_posts。正在覆盖现有方法 Post.public_posts。
创建作用域 :private_posts。正在覆盖现有方法 Post.private_posts。
创建作用域 :open。正在覆盖现有方法 Poll.open。
迁移至 CreateDiscourseVotingCategorySettings (20200727220143)
迁移至 CreateDiscourseVotingVotes (20200728222920)
迁移至 CreateDiscourseVotingTopicVoteCount (20200729042607)
创建作用域 :visible_groups。正在覆盖现有方法 Group.visible_groups。
创建作用域 :visible。正在覆盖现有方法 Notification.visible。
创建作用域 :public_posts。正在覆盖现有方法 Post.public_posts。
创建作用域 :private_posts。正在覆盖现有方法 Post.private_posts。
创建作用域 :open。正在覆盖现有方法 Poll.open。
创建作用域 :visible_groups。正在覆盖现有方法 Group.visible_groups。
创建作用域 :visible。正在覆盖现有方法 Notification.visible。
创建作用域 :public_posts。正在覆盖现有方法 Post.public_posts。
创建作用域 :private_posts。正在覆盖现有方法 Post.private_posts。
创建作用域 :open。正在覆盖现有方法 Poll.open。

Ubuntu 14.04 看起来相当老旧了,最近几周我看到一些帖子提到它出现了问题:
https://meta.discourse.org/search?q=14.04%20order%3Alatest

也许是五月到现在某个依赖项的升级破坏了某些功能::roll_eyes:

3 个赞

感谢您的回答

我有一台新的服务器,运行 Ubuntu 20.04.1 LTS 并已安装 Docker。

我该如何将我的旧 prod-forum 迁移到这台新服务器上?
能否为我提供分步操作指南?

按照常规指南从头开始构建。复制 app.yml 文件。重新构建。从第一台服务器导入 Discourse 备份文件。完成。

(哦,还有一件小事:重新映射域名的 IP 地址!)

3 个赞

不错,但通过管理面板创建备份对我们不起作用))

迁移 Docker 容器

docker ps -a

docker commit c559bec6f29a local_discourse/app
docker save local_discourse/app > /tmp/local_discourse_app.tar.gz
scp /tmp/local_discourse_app.tar.gz root@my-new-server:/tmp/
---
docker load < /tmp/local_discourse_app.tar.gz
docker run local_discourse/app

问题出现在这一步 - NoMethodError on docker run - #8 by Dev_Work

1 个赞

您目前没有异地备份吗?

2 个赞

我需要一份包含最新数据的副本(而非最新备份)

1 个赞

在为新服务器恢复备份时出现错误?

./launcher enter app
discourse restore discourse-2020-08-24-103334-v20200811004537.tar.gz

@Dev_Work

很遗憾听到你遇到了问题。

那么,我们来回顾一下:

  • 你对网站进行了完整的手动备份,该备份文件为:
discourse-2020-08-24-103334-v20200811004537.tar.gz 
  • 然后你使用标准方法从头开始安装了 Discourse:
https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
  • 你是在一台全新的已安装并测试过 Docker 的 Ubuntu 20.04.1 LTS 服务器上进行的。

  • 接着,你在新的服务器 digs 上手动恢复了上述备份?

情况是这样吗?目前你卡在这一步了吗?

2 个赞

感谢您的回答。
是的,没错,在新版 Ubuntu 20.04.1 LTS 上会出现问题。

您在尝试手动 Discourse 恢复流程之前,是否已创建用户名为 “pavel_BLANKEDOUT” 的管理员?

我猜测这可能不是问题所在,只是出于全面排查的目的询问一下,因为您的重复键错误中提到了用户 “pavel_BLANKEDOUT”。

不,未创建。

用户管理员不在备份数据库中。

@Dev_Work

你正在使用的备份所在的原始网站是否已完全无法访问?

或者,你能否进入旧网站的容器,检查 Discourse 数据库是否存在损坏的索引?

另外,你那个出问题的旧实例运行的是哪个版本的 PostgreSQL?是 10 还是 12?

2 个赞

听起来和我遇到的问题一样:Search results for 'could not create unique index category:6' - Discourse Meta

哭脸 :frowning:

ERROR:  无法创建唯一索引 "index_user_emails_on_email"
DETAIL:  键 (lower(email::text))=(andrii_test@local.com) 重复。
EXCEPTION: psql 失败:DETAIL:  键 (lower(email::text))=(andrii_test@local.com) 重复。
/var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

旧服务器使用的是 PostgreSQL 12

旧网站和服务器运行正常

我可以进入旧网站的容器(如何检查损坏的索引?)