У меня есть небольшой форум themooster.net на базе Discourse, который я не обновлял несколько месяцев.
Я нажал «Обновить» в рекомендации «Администратор», чтобы выполнить обновление, но система сообщила, что обновление нужно выполнить через командную строку, и выдала три команды для запуска:
cd /var/discourse
git pull
./launcher rebuild app
Я выполнил эти три команды. Команда «rebuild app» сначала не сработала, потому что на моей маленькой машине Linode не хватало 5 ГБ свободного места. Я добавил больше дискового пространства, и «rebuild app», похоже, завершилась успешно.
Однако сайт не запустился.
Я проверил настройки, перезагрузил сервер, но сайт всё равно не заработал. Проверил ещё раз.
Кажется, фронтенд-сервер nginx запускается нормально, но при попытке доступа к форуму через веб-браузер как обычный пользователь я получаю ошибку «502 Bad Gateway» от фронтенда nginx.
Файл «/var/discourse/shared/standalone/log/var-log/postgres/current» заполнен ошибками, такими как:
2021-04-17 13:54:37.785 UTC [7095] FATAL: файлы базы данных несовместимы с сервером
2021-04-17 13:54:37.785 UTC [7095] DETAIL: Каталог данных был инициализирован с помощью PostgreSQL версии 13, которая не совместима с этой версией 10.12 (Debian 10.12-2.pgdg100+1).
У меня есть хорошие резервные копии форума в директории:
/var/discourse/shared/standalone/backups/default
Я сейчас посмотрю вашу ссылку на PostgreSQL 13 — спасибо.
Существует ли способ, которым я мог бы или должен был узнать об этой сложности, не являясь администратором на полную ставку, постоянно следящим за активностью ключевых технологий (PostgreSQL, Ruby, Linux и т. д.), лежащих в основе Discourse?
Если да, то могли бы эти три строки инструкции (cd /var/discourse; …) содержать ещё одну строку: «Предупреждение: сначала проверьте <ссылка>здесь</ссылка> на наличие другой информации, которая может быть применима»?
Если нет, то Discourse должен быть более открытым в том, что он не подходит для случайного использования.
Я попробую ещё несколько раз прочитать страницу об обновлении PostgreSQL 13, которую вы любезно предоставили.
Однако после первых нескольких прочтений я всё ещё совершенно растерян. Я не понимаю, какие разделы этой страницы могут быть применимы к моей ситуации (если таковые вообще есть).
Например, страница об обновлении PostgreSQL 13 (что, полагаю, вполне логично) посвящена обновлению с PostgreSQL 12 до 13. А в моём сообщении об ошибке:
The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 10.12 (Debian 10.12-2.pgdg100+1).
(«Каталог данных был инициализирован PostgreSQL версии 13, которая несовместима с этой версией 10.12 (Debian 10.12-2.pgdg100+1)»)
упоминается версия 10.12… Это PostgreSQL 10 или PostgreSQL 12? (Обычно я бы воспринял «10.12» как прежде всего версию 10, а не 12).
Таким образом, приведённая выше ссылка на PostgreSQL 13, насколько она применима к обновлению с версии 12 до 13, не обязательно актуальна, насколько мне известно (а это, честно говоря, немного).
У меня очень дурное предчувствие по этому поводу… Как будто пытаюсь починить боеприпасы в полной темноте, в пещере, без инструкций, не имея подготовки и даже не зная точно, с какими именно боеприпасами имею дело.
«Вам стоит пересобрать контейнер ещё раз. Я предполагаю, что вы пропустили сообщение об обновлении PostgreSQL».
заставил меня подумать, что стоит снова попробовать выполнить «cd /var/discourse; git pull; ./launcher rebuild app»… Оказывается, эту «пересборку» можно запускать несколько раз.
На этот раз я сохранил вывод. Однако я ПОДТВЕРЖДАЮ, что проигнорировал большинство сообщений в выводе. Только команда «./launcher rebuild app» выдала 2020 строк. Мне потребовался бы месяц воскресений, чтобы разобраться, какие программы запущены и что означают их сообщения. Нет практического способа узнать, игнорирую ли я что-то критичное в этом выводе.
Однако…
Сработало!!
Мой сайт снова запустился, работая на текущей версии ПО.
Итак, урок на сегодня: Если команда «./launcher rebuild app» не приводит к работоспособному сайту, попробуйте её снова.