当社の Discourse インストール環境は、公式リポジトリをベースとした標準的なインストールですが、SSO 統合のみをログインシステムとして使用しています。数年間、大規模なユーザーベースにサービスを提供しており、Ubuntu ベースの専用サーバーで他のアプリケーションも稼働させていますが、幸いなことに大きな問題はありませんでした。
残念ながら、最近、予期せぬ障害が発生し、まったく機能しなくなりました。
最初の報告では、サイトでランダムな 500 エラーが多発し、通知が配信されないものの、それ以外は機能しているとのことでした。インストールは 1 ~ 2 ヶ月前に更新され、それ以降、インストール環境やサーバー環境に変更は加えられていないため、この状況は驚くべき展開でした。
500 エラーが発生していることを確認し、最初にサーバーとコンテナを再起動しましたが、効果はありませんでした。パッケージをすべて最新の状態にするために「apt-get update」を実行しました。また、バックエンドから Discourse を更新しようとしましたが、管理者リンクでログインしても、メールでログインリンクが送信されず、コンテナ再起動後、管理者ログインページは 500 エラーのみを生成しました。
ハードウェア、OS、その他のサーバー環境に異常がないか確認しましたが、何も問題はないようでした。
次に、CLI を使用して完全な再構築と「git pull」による更新を試みました。これは、アップグレード中のデータベース移行中に次のエラーで失敗しました。
I, [2022-08-09T23:15:21.229857 #1] INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1] INFO -- : docker_manager is already at latest compatible version
I, [2022-08-09T23:15:23.939220 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT: UPDATE bookmarks
SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
データベースに不整合がある場合、それがどのように発生したのか全く分かりません…必要であれば、コンソール履歴の残りを提示できます。
「./discourse-doctor」を実行したところ、メールサーバーの設定に関する警告(「certificate verify failed (self signed certificate)」)を除き、問題なく完了しました。これは、メールが送信されなかった理由を説明している可能性があります。以前は、この設定でメールが送信されており、メールサーバーは他に問題なく機能しているように見えるため、これについては確信が持てません。
現在、サイトは完全にダウンしており(更新失敗後、500 エラーを返すだけです)、外部サポートを求める以外に、どのように進めばよいか全く分かりません。どのようなガイダンスでも大変ありがたいです!