Discourseがメンテナンスモードでスタックした

こんにちは、私のディスコースサーバーがメンテナンスモードでスタックしています。
意図的に数ヶ月間メンテナンスモードのままにしており、最初にメンテナンスモードに設定して以来、多くのバージョンにアップグレードしました。

セッションが期限切れになりログアウトされたため、再度ログインできません。

ディスコースサーバーにSSH接続できます。
以下の手順を試しました。

  1. ディスコースサーバーにSSH接続する
  2. /var/discourseに移動する
  3. 実行: ./launcher enter app
  4. 実行 rails c

ここでメンテナンスモードを無効にするためにいくつかのことを試しました。

[1] pry(main)> 
[2] pry(main)> 
[3] pry(main)> Discourse.disable_readonly_mode(Discourse::READONLY_MODE_KEY)
=> true
[4] pry(main)> Discourse.disable_readonly_mode
=> true

SSHからウェブブラウザにフォーカスを移すと、メンテナンスモードのバナーが消えるのがわかります。

数秒後に再び表示されます。

すでに以下のドキュメントを参照しました。

助けてください

最初のトピックで、コンテナを停止してから再起動することでうまくいった人がいました。試してみる価値はありますか?

提案ありがとうございます。残念ながら、これは役に立ちませんでした :frowning:

実行したのは以下の通りです。

docker ps
docker kill app
docker start app

興味深いのは、読み取り専用モードを手動で有効にしようとしたことです。
例:

[8] pry(main)> Discourse.enable_readonly_mode
=> true
[9] pry(main)> Discourse.disable_readonly_mode
=> true
[10] pry(main)>

これを実行したところ、バナーが再び表示され、「サイトは読み取り専用モードのため、ログインが無効になっています。」というメッセージが表示されてログインボタンをクリックすることさえできませんでした。また、以下のバナーも表示されました。

このサイトは読み取り専用モードです。閲覧は続行できますが、返信、いいね、その他の操作は現在無効になっています。

disable_readonly_mode を再度呼び出すと、メンテナンスモードのバナーが消え、ログインボタンをクリックできるようになります。Discourse は認証 SSO プロバイダーにリダイレクトさえしてくれます。

しかし、Discourse にリダイレクトされると、「サイトは読み取り専用モードです。操作は無効になっています。」というページ全体が表示されます。

掘り下げてみたのですが、まだ修正は見つかっていませんが、/u/admin-login リンクは read_only をバイパスして、ログインできるようです。

@41821 Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)をお試しいただけますか

「いいね!」 4

状態から抜け出すために何もできませんでした。
Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY) の後、一瞬 R/W になりますが、すぐに R/O に戻ってしまいます。ログには何もわかりませんでした。Redis をフラッシュしても役に立ちません。Redis キーを手動でクリアしても同様です。

これは 2.8.7 を以前の機能していたバージョンである 2.8.3 にロールバックすると問題が解決したため、バグである可能性が非常に高いです。

コードを調べてバグがどこで導入されたのかを突き止めようとしましたが、実際には理解できませんでした。

「いいね!」 1

これはセルフホストサイトですか?Redisのフラッシュで全てクリアされるはずです。読み取り専用のロジックは、適切なRedisキーの設定に完全に依存しています。