プラグインのインストールを試みたところサイトが壊れ、再構築を実行できません

フォーマットプラグインをインストールしようとしていましたが、コードを間違った場所に配置してしまい、サイトを再構築して読み込んだところ、プラグインが初期化されませんでした。そこでミスを発見し、それを削除しました。しかし、エラーが特定の行にあると表示されました。その行のエラーを見つけ、yamllint で確認して一致を確認し、プラグインを削除しました。しかし、現在では再構築が機能しなくなっています。永続的なエラーが繰り返し表示され、サイトのフロントページは読み込めるものの、トピックや他のコンテンツは一切読み込めません。

以下は再構築と doctor の出力です。

サマリー
失敗
--------------------
NoMethodError: nil:NilClass に対して 'each' メソッドが定義されていません
失敗の場所: /pups/lib/pups/config.rb:99:in `run_commands'
dfd33a9a3be65ddb9a1fd19c19e5034a44c39f46e330ccdf0533f4f66d7d0005
** ブートストラップに失敗しました ** 上記にスクロールして、以前のエラーメッセージを確認してください。複数のエラーが存在する可能性があります。
./discourse-doctor を実行すると問題の診断に役立つ場合があります。
root:/var/discourse# ./discourse-doctor
DISCOURSE DOCTOR 2020 年 7 月 16 日 07:53:05 UTC
OS: Linux itsbx 4.15.0-99-generic #100-Ubuntu SMP 2020 年 4 月 22 日 20:32:56 UTC x86_64 x86_64 x86_64 GNU/Linux



==================== 深刻な問題!!!! ====================
アプリが実行されていません!
再構築を試みます
==================== 再構築ログ ====================
ランチャーが最新であることを確認中
origin を取得中
ランチャーは最新です
古いコンテナを停止中
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
既に最新です。
I, [2020-07-16T07:53:23.985444 #1]  INFO -- : --stdin を読み込み中


失敗
--------------------
NoMethodError: nil:NilClass に対して 'each' メソッドが定義されていません
失敗の場所: /pups/lib/pups/config.rb:99:in `run_commands'
2386f66f76d9c9ffbbcd02bfad9e0530683714d433bff8d70976cae6c4b8fc86
** ブートストラップに失敗しました ** 上記にスクロールして、以前のエラーメッセージを確認してください。複数のエラーが存在する可能性があります。
./discourse-doctor を実行すると問題の診断に役立つ場合があります。
==================== 再構築ログ終了 ====================
アプリの再構築に失敗しました。

ドメイン名を確認中 . . .

yoursite への接続に成功しました。
非標準のプラグインを削除して再構築することをお勧めします。
既存のコンテナを再起動しようとしています . . .

既存のコンテナを起動中
+ /usr/bin/docker start app
デーモンからのエラー応答: エンドポイント app (39c7d5a80e10058bc952825fccd073af0f2ff12857895aa1046a6615d879a5a0) での外部接続のプログラミングにドライバーが失敗しました: userland プロキシの起動エラー: listen tcp 0.0.0.0:443: bind: アドレスは既に使用されています
エラー: コンテナ app の起動に失敗しました
コンテナの再起動に失敗しました。


==================== プラグイン ====================
          - git clone github.com/discourse/docker_manager.git

非公式のプラグインは検出されませんでした。

公式リストについては、thub.com/discourse/discourse/blob/master/lib/plugin/metadata.rb を参照してください。

========================================
**myhost での Discourse バージョン: 見つかりません**
**localhost での Discourse バージョン: 見つかりません**


==================== メモリ情報 ====================
RAM (MB): 2041

              total        used        free      shared  buff/cache   available
Mem:           1993         144        1237           0         611        1677
Swap:          2047          76        1971

==================== ディスク容量チェック ====================
---------- OS ディスク容量 ----------
ファイルシステム      サイズ  使用量  空き  使用率  マウント先
/dev/vda1        49G   11G   38G  22% /

==================== ディスク情報 ====================
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 セクタ
単位: 1 * 512 = 512 バイトのセクタ
セクタサイズ (論理/物理): 512 バイト / 512 バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスクラベルタイプ: gpt
ディスク識別子: 3980448C-AF15-4833-A022-C759F0D2D80A

デバイス      開始      終了     セクタ数  サイズ タイプ
/dev/vda1  227328 104857566 104630239 49.9G Linux ファイルシステム
/dev/vda14   2048     10239      8192    4M BIOS ブート
/dev/vda15  10240    227327    217088  106M Microsoft 基本データ

パーティションテーブルのエントリがディスクの順序と一致していません。

==================== ディスク情報終了 ====================

全く何をすればよいかわかりませんが、サイトは完全に壊れています。リンクは 1 投稿あたり 3 つまでしか使用できないため削除しましたが、それらは存在していました。再構築はこれまで正常に機能していましたが、間違った場所に配置したプラグインを削除した瞬間からすべてが停止しました。いくつかの行に問題がありましたが、修正済みであることを確認しました。完全に途方に暮れています。setup を再実行してすべての設定を確認しようとしましたが、正常に進んだものの、再構築で再び失敗しました。

さて、何時間も再起動や編集を試した後、ついに

./launcher start app
を実行してみたら、問題なく動作しました。プラグインもインストールされています(削除したと思っていたのですが)。まあ、いいや。ただ、今後は再構築や追加のインストールを試すのが怖いです。何が原因で、何が修正されたのかさえわからないので。何か知見があれば、まだ助かります。

ご説明だけでは何が問題だったのか特定できませんが、直前の再ビルドが成功したのであれば、次もおそらく成功するでしょう。

彼はたぶん、./launcher start app で古いイメージを起動したのでしょう。

@Kartoon さん、再ビルドを試してみてください。もし失敗しても、同じコマンドで最後の正常なイメージから再開できます。

申し訳ありませんが、緊急の用事があり、このトピックを確認できませんでした。

再構築は成功しませんでした。今日も再度試しましたが、やはり失敗しました。"./launcher start app"を実行すればサイトは正常に動作しますが、再構築を試みると常に失敗し、discourse doctorからもエラーが発生します。もし参考になるようであれば、提供されるログを貼り付けることもできますが、明らかに何か問題が残っており、将来的にどこかでトラブルにつながるのではないかと心配しています。

yml ファイルにフォーマットエラーがあるようです。

そのようなエラーを見つけるのは難しい場合がありますが、チェックしてくれるツールもあります。

私がプラグインを追加する際にいつも行うのは、既存のプラグイン行をコピー&ペーストし、GitHub の URL を編集することです。そうすれば、何かを壊す可能性を最小限に抑えられます。

それが私の推測でしたが、最初は間違っていました。プラグインのテキストを間違った場所に配置した結果生じたエラーを修正するために http://www.yamllint.com/ を参照しました。すると完全に問題ないという結果が返ってきました。私はプロセス全体を通じて何度も確認しました(特定の部分も全体も)が、正しいと表示されました。何かの理由でそのサイトが不正確である可能性はありますが、私にはその知識が十分ではありません。

再構築を試みた際に取得されるエラーと、その直後に discourse doctor を実行した際の結果(どちらも 5 分前のもの)を以下に示します。個人情報については削除しましたが、実際のログではすべて正しく記録されています。

再構築アプリ

ランチャーが最新であることを確認中
origin を取得中
ランチャーは最新です
古いコンテナを停止中

  • /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && /pups/bin/pups --stdin
    すでに最新です。
    I, [2020-07-23T22:58:14.812604 #1] INFO – : --stdin を読み込み中

失敗

NoMethodError: nil:NilClass に対して ‘each’ メソッドが定義されていません
失敗場所: /pups/lib/pups/config.rb:99:in `run_commands’
1a575aa2a169fcb4a9bbb0874c55d3fd01ee1e7368ff58e2099c9602f6c32109
** ブートストラップに失敗しました ** 上へスクロールして、それ以前のエラーメッセージを確認してください。複数のエラーが存在する可能性があります。
./discourse-doctor で問題の診断ができるかもしれません。

discourse-doctor

DISCOURSE DOCTOR 2020 年 7 月 23 日 22:59:22 UTC
OS: Linux itsbx 4.15.0-111-generic #112-Ubuntu SMP 2020 年 7 月 9 日 20:32:34 UTC x86_64 x86_64 x86_64 GNU/Linux

containers/app.yml が見つかりました

==================== YML 設定 ====================
DISCOURSE_HOSTNAME=正常
SMTP_ADDRESS=正常
DEVELOPER_EMAILS=正常
SMTP_PASSWORD=正常
SMTP_PORT=587
SMTP_USER_NAME=正常
LETSENCRYPT_ACCOUNT_EMAIL=正常

==================== DOCKER 情報 ====================
DOCKER バージョン: Docker version 19.03.8, build afacb8b7f0

DOCKER プロセス (docker ps -a)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
343a1aa3c05c local_discourse/app “/sbin/boot” 7 日前 約 1 分前に終了 (5) app

==================== 深刻な問題!!! ====================
app が実行されていません!
再構築を試行中
==================== 再構築ログ ====================
ランチャーが最新であることを確認中
origin を取得中
ランチャーは最新です
古いコンテナを停止中

  • /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && /pups/bin/pups --stdin
    すでに最新です。
    I, [2020-07-23T22:59:41.894064 #1] INFO – : --stdin を読み込み中

失敗

NoMethodError: nil:NilClass に対して ‘each’ メソッドが定義されていません
失敗場所: /pups/lib/pups/config.rb:99:in `run_commands’
439734a2cd69755d8351bbdadd9756cb573577d7f1b306aedaafa1c7d4bc29cf
** ブートストラップに失敗しました ** 上へスクロールして、それ以前のエラーメッセージを確認してください。複数のエラーが存在する可能性があります。
./discourse-doctor で問題の診断ができるかもしれません。
==================== 再構築ログ終了 ====================
アプリの再構築に失敗しました。

ドメイン名を確認中 . . .

ウェブサイトへの接続に成功しました。
非標準のプラグインを削除して再構築することをお勧めします。
既存のコンテナの再起動を試行中 . . .

既存のコンテナを起動中

  • /usr/bin/docker start app
    daemon のエラー応答: エンドポイント app (100c15324a128a2b007d8b89e29fe0f455585fd8c7d99855ef87bb4f17892b4b) の外部接続のプログラミングにドライバーが失敗しました: ユーザーランドプロキシの起動エラー: listen tcp 0.0.0.0:443: bind: アドレスが既に使用されています
    エラー: コンテナの起動に失敗しました: app
    コンテナの再起動に失敗しました。

==================== プラグイン ====================
- git clone GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub

非公式のプラグインは検出されませんでした。

公式リストについては discourse/lib/plugin/metadata.rb at main · discourse/discourse · GitHub を参照してください。

========================================
** ウェブサイト上の Discourse バージョン: 見つかりません **
** ローカルホスト上の Discourse バージョン: 見つかりません **

==================== メモリ情報 ====================
RAM (MB): 2041

          total        used        free      shared  buff/cache   available

Mem: 1993 140 1310 0 542 1695
Swap: 2047 72 1975

==================== ディスク容量チェック ====================
---------- OS ディスク容量 ----------
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 49G 13G 37G 26% /

==================== ディスク情報 ====================
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3980448C-AF15-4833-A022-C759F0D2D80A

Device Start End Sectors Size Type
/dev/vda1 227328 104857566 104630239 49.9G Linux filesystem
/dev/vda14 2048 10239 8192 4M BIOS boot
/dev/vda15 10240 227327 217088 106M Microsoft basic data

パーティションテーブルのエントリがディスクの順序通りに配置されていません。

==================== ディスク情報終了 ====================

私がすぐに気づいたのは、「深刻な問題、app が実行されていません」と「ウェブサイトおよびローカルホスト上の Discourse バージョンが見つかりません」というメッセージです。私の(無知な)推測では、これらが何を意味するかはともかく、これが問題の原因だということです。

また、再構築を実行した直後にサイトがクラッシュし、それを修正するために再度「start app」を実行しました。

うーん。まあ、フォーマットの問題には見えないけど、何が原因かまではわからないな。

もし app.yml が気になるなら、クリーンな app.yml ファイルからやり直すのがベストだと思います。

rm /var/discourse/containers/app.yml
cd /var/discourse
cp samples/standalone.yml containers/app.yml
nano containers/app.yml

その後、すべてを確認してから再ビルドしてください。

これで完璧に動作しました。yml が正しいと報告されていた時点では、実際にはそうではありませんでした。

その後、メール送信が一時的にうまくいかない問題が発生しましたが、新しい yml を再度確認したところ、メールアドレスの設定ミスに気づきました(いつも Mailgun で @mg. に設定しているのを忘れてしまいます)。これで5分以内に修正できました。

本当にありがとうございます。もういつでも破滅が迫っているという恐怖はなくなりました。