Пытался установить плагин, сайт сломался, не могу запустить rebuild

Я пытался установить плагин форматирования, но по ошибке поместил код не в то место. После пересборки и загрузки сайта плагин не инициализировался. Я понял свою ошибку, удалил код… но система сообщила об ошибке в одной из строк. Я нашел ошибку, проверил файл через yamllint — всё совпало, удалил плагин… но теперь пересборка не работает. Система постоянно выдает одну и ту же ошибку. При этом главная страница сайта загружается, но открыть какие-либо темы или другие разделы невозможно.

Вот вывод команд пересборки и утилиты doctor:

Сводка
FAILED
--------------------
NoMethodError: undefined method `each' for nil:NilClass
Location of failure: /pups/lib/pups/config.rb:99:in `run_commands'
dfd33a9a3be65ddb9a1fd19c19e5034a44c39f46e330ccdf0533f4f66d7d0005
** FAILED TO BOOTSTRAP ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках — их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
root:/var/discourse# ./discourse-doctor
DISCOURSE DOCTOR Thu Jul 16 07:53:05 UTC 2020
OS: Linux itsbx 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux



==================== SERIOUS PROBLEM!!!! ====================
app not running!
Attempting to rebuild
==================== REBUILD LOG ====================
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Already up to date.
I, [2020-07-16T07:53:23.985444 #1]  INFO -- : Loading --stdin


FAILED
--------------------
NoMethodError: undefined method `each' for nil:NilClass
Location of failure: /pups/lib/pups/config.rb:99:in `run_commands'
2386f66f76d9c9ffbbcd02bfad9e0530683714d433bff8d70976cae6c4b8fc86
** FAILED TO BOOTSTRAP ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках — их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
==================== END REBUILD LOG ====================
Failed to rebuild app.

Checking your domain name . . .

Connection to yoursite succeeded.
You should probably remove any non-standard plugins and rebuild.
Attempting to restart existing container. . .

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (39c7d5a80e10058bc952825fccd073af0f2ff12857895aa1046a6615d879a5a0): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use
Error: failed to start containers: app
Failed to restart the container.


==================== PLUGINS ====================
          - git clone github.com/discourse/docker_manager.git

No non-official plugins detected.

See thub.com/discourse/discourse/blob/master/lib/plugin/metadata.rb for the official list.

========================================
**Discourse version at myhost: NOT FOUND**
**Discourse version at localhost: NOT FOUND**


==================== MEMORY INFORMATION ====================
RAM (MB): 2041

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

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        49G   11G   38G  22% /

==================== DISK INFORMATION ====================
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

Partition table entries are not in disk order.

==================== END DISK INFORMATION ====================

Я совершенно не знаю, что делать, но сейчас сайт полностью неработоспособен. Я удалил ссылки, потому что в одном посте можно использовать только три, но они всё ещё там были. Пересборки работали нормально ДО тех пор, пока я не удалил плагин, который по ошибке поместил в совершенно неправильное место. После этого всё перестало работать. Было несколько строк с ошибками, но я подтвердил, что исправил их. Я в полнейшем замешательстве. Я только что попытался снова запустить setup и проверить все настройки — всё прошло успешно, но при пересборке снова возникла ошибка…

Ладно, после того как я часами пытался перезапустить и отредактировать вещи, я наконец попробовал

./launcher start app, и всё запустилось нормально, плагин установлен (хотя я думал, что удалил его?). В общем, неважно. Однако теперь я боюсь пробовать пересборку или устанавливать что-то ещё, так как не знаю, что именно вызвало эту проблему, или даже что было исправлено. Так что любая подсказка всё ещё будет оценена по достоинству.

По вашему описанию невозможно определить, в чём могла быть проблема, но если последняя сборка прошла успешно, то следующая, скорее всего, тоже будет успешной.

Он, наверное, просто запустил старый образ командой ./launcher start app.

@Kartoon, ты, скорее всего, можешь попробовать пересобрать. Если это не сработает, ты всё ещё сможешь восстановить последний известный рабочий образ через ту же команду.

Извините, у меня возникли неотложные дела, и я не мог проверить эту тему.

Пересборка НЕ удалась, и я попробовал снова сегодня — тоже безрезультатно. Сайт работает нормально после запуска “./launcher start app”, но при любой попытке пересобрать его процесс завершается ошибкой, как и проверки через discourse doctor. Если нужно, я могу выложить лог, который он выдаёт, но очевидно, что что-то всё ещё не так, и я беспокоюсь, что это может привести к проблемам в будущем.

Похоже, в вашем файле yml есть ошибка форматирования.

Такие ошибки бывает трудно найти и распознать. Существуют инструменты, которые их проверяют.

Что я обычно делаю при добавлении плагина: копирую строку существующего плагина и редактирую ссылку на GitHub. Так вы минимизируете вероятность того, что что-то сломаете.

Я так и предполагал, и сначала это было неверно, но я обратился к http://www.yamllint.com/, чтобы исправить ошибки, возникшие из-за того, что я изначально разместил текст плагина в неправильных местах. После проверки сайт показывает, что всё в порядке. Я многократно проверял это в процессе (как отдельные части, так и весь файл), и сайт подтверждал, что всё верно. Если только этот сайт не содержит ошибок по какой-то причине, что, насколько я знаю, возможно, так как я не слишком хорошо разбираюсь в этом.

Вот что я получаю при попытке пересборки, а ниже — результат запуска discourse doctor (оба действия выполнены пять минут назад). Я удалил личную информацию, но в реальном логе всё на месте и корректно.

пересборка приложения

Проверка актуальности лаунчера
Получение 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: метод each не определен для nil:NilClass
Место ошибки: /pups/lib/pups/config.rb:99:in `run_commands’
1a575aa2a169fcb4a9bbb0874c55d3fd01ee1e7368ff58e2099c9602f6c32109
** СБОЙ ПРИ ИНИЦИАЛИЗАЦИИ ** Пожалуйста, прокрутите вверх и найдите предыдущие сообщения об ошибках; их может быть несколько.
Утилита ./discourse-doctor может помочь в диагностике проблемы.

discourse-doctor

DISCOURSE DOCTOR Чт Июл 23 22:59:22 UTC 2020
ОС: Linux itsbx 4.15.0-111-generic #112-Ubuntu SMP Чт Июл 9 20:32:34 UTC 2020 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 дней назад Завершён (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: метод each не определен для nil:NilClass
Место ошибки: /pups/lib/pups/config.rb:99:in `run_commands’
439734a2cd69755d8351bbdadd9756cb573577d7f1b306aedaafa1c7d4bc29cf
** СБОЙ ПРИ ИНИЦИАЛИЗАЦИИ ** Пожалуйста, прокрутите вверх и найдите предыдущие сообщения об ошибках; их может быть несколько.
Утилита ./discourse-doctor может помочь в диагностике проблемы.
==================== КОНЕЦ ЖУРНАЛА ПЕРЕСБОРКИ ====================
Не удалось пересобрать приложение.

Проверка вашего доменного имени . . .

Соединение с сайтом успешно.
Возможно, вам стоит удалить любые нестандартные плагины и выполнить пересборку.
Попытка перезапуска существующего контейнера . . .

запуск существующего контейнера

  • /usr/bin/docker start app
    Ошибка ответа от демона: сбой драйвера при программировании внешней связности для конечной точки 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 на localhost: НЕ НАЙДЕНА

==================== ИНФОРМАЦИЯ О ПАМЯТИ ====================
ОЗУ (МБ): 2041

          total        used        free      shared  buff/cache   available

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

==================== ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ ====================
---------- Место на диске ОС ----------
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 49G 13G 37G 26% /

==================== ИНФОРМАЦИЯ О ДИСКЕ ====================
Диск /dev/vda: 50 ГиБ, 53687091200 байт, 104857600 секторов
Единицы: секторы по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 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 на сайте и на localhost не найдена». Мое (некомпетентное) предположение: что бы это ни значило, именно в этом проблема.

Кроме того, при запуске пересборки мой сайт прямо сейчас упал, и мне пришлось выполнить «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

Затем вы можете выполнить пересборку, когда всё будет проверено.

Это сработало идеально. Очевидно, что когда система сообщала, что YAML-файл верный… он был неверным.

Затем у меня возникла временная проблема с отправкой писем, но, когда я перепроверил новый YAML-файл, понял, что ошибся в адресе электронной почты (я всегда забываю, что установил его как @mg. в Mailgun), поэтому это было исправлено в течение пяти минут.

Ох, огромное спасибо! Теперь у меня нет страха, что всё рухнет в любой момент.