Сбой обновления: версия PostgreSQL 13 ... несовместима с ... версией 10.12

У меня есть небольшой форум 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 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).

Ага — мой файл:

/var/discourse/shared/standalone/postgres_data_old/PG_VERSION

содержит значение «10».

Таким образом, приведённая выше ссылка на PostgreSQL 13, насколько она применима к обновлению с версии 12 до 13, не обязательно актуальна, насколько мне известно (а это, честно говоря, немного).

У меня очень дурное предчувствие по этому поводу… Как будто пытаюсь починить боеприпасы в полной темноте, в пещере, без инструкций, не имея подготовки и даже не зная точно, с какими именно боеприпасами имею дело.

Этот комментарий, на который я случайно наткнулся вот как:

https://meta.discourse.org/t/how-do-i-manually-update-discourse-and-docker-image-to-latest/23325/238?u=thepythoniccow

«Вам стоит пересобрать контейнер ещё раз. Я предполагаю, что вы пропустили сообщение об обновлении PostgreSQL».

заставил меня подумать, что стоит снова попробовать выполнить «cd /var/discourse; git pull; ./launcher rebuild app»… Оказывается, эту «пересборку» можно запускать несколько раз.

На этот раз я сохранил вывод. Однако я ПОДТВЕРЖДАЮ, что проигнорировал большинство сообщений в выводе. Только команда «./launcher rebuild app» выдала 2020 строк. Мне потребовался бы месяц воскресений, чтобы разобраться, какие программы запущены и что означают их сообщения. Нет практического способа узнать, игнорирую ли я что-то критичное в этом выводе.

Однако…

Сработало!!

Мой сайт снова запустился, работая на текущей версии ПО.

Итак, урок на сегодня: Если команда «./launcher rebuild app» не приводит к работоспособному сайту, попробуйте её снова.

Ах. Извините, я не подумал рассказать вам то, что я сказал тому парню!

:tada: Отлично! Так рада, что у вас получилось!

Да. Возможно, это единственное ещё, что вам нужно знать. :slight_smile:

Рад, что вы снова в строю!