ディスコースがハングし、ディスコースの復元に失敗しました

./launcher rebuild app コマンドを実行しました

redis is now ready to exit, bye bye ... で Discourse がフリーズしました(40 分間)。その後、Ctrl + C で停止しました。

ずっと読み込みが続いています。その結果、新しいコンテナが作成されませんでした。原因を特定するために、Discourse のどのログを確認すればよいかご教示いただけますか?

リソース割り当ての問題でしょうか?

このサーバーには他のウェブサイトやサービスもホストされていますか?サーバーの RAM/CPU の使用可能量はどれくらいですか?

サーバーリソース

それは正常です。

それは異常です。そのメッセージの直後、通常は 1 分もかからずに新しいコンテナが起動します。

同じ結果が何度も出ているのでしょうか?

はい、何度か試しましたが、同じ結果です。

ブランチ 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

5 月と現在の間に依存関係のバージョンアップが何かを壊してしまったのかもしれません :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 サーバー上で行われました。

  • そして、新しいサーバー上で上記のバックアップを手動で復元されたということでしょうか?

この認識で合っていますか?また、現在はこの段階でお困りでしょうか?

「いいね!」 2

ご回答ありがとうございます。
はい、その通りです。新しい Ubuntu 20.04.1 LTS で問題が発生します。

手動での Discourse 復元プロセスを試みる前に、ユーザー名「pavel_BLANKEDOUT」で管理者アカウントを作成しましたか?

これは問題ではない可能性が高いですが、重複キーエラーにユーザー名「pavel_BLANKEDOUT」が記載されているため、念のため確認させていただいています。

いいえ、作成していません。

バックアップデータベースに含まれていないユーザー管理者。

こんにちは、@Dev_Work さん

バックアップ元として使用している元のサイトは完全にダウンしているのでしょうか?

それとも、古いサイトのコンテナにアクセスして、Discourse データベースの破損したインデックスを確認することはできますか?

また、動作しなくなった古いインスタンスは、PostgreSQL のどのバージョン(10 または 12)を実行していましたか?

「いいね!」 2

私の問題と同じですね。
https://meta.discourse.org/search?q=could%20not%20create%20unique%20index%20category%3A6

泣きそう :frowning:

ERROR:  could not create unique index "index_user_emails_on_email"
DETAIL:  Key (lower(email::text))=(andrii_test@local.com) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (lower(email::text))=(andrii_test@local.com) is duplicated.
/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 を使用していました

古いサイトとサーバーは動作しています

古いサイトのコンテナに入れます(破損したインデックスの確認方法はどうすればよいですか?)