ОШИБКА: вы используете устаревшую версию образа Discourse

Привет, это моя первая тема! Меня зовут Нелли Эггси, и я создаю веб-сайт, используя Ghost и Discourse.

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

После обновления Discourse через административный интерфейс я получил сообщение:

Вы используете старую версию образа Discourse.
Обновления через веб-интерфейс отключены, пока вы не запустите последний образ.

Для этого войдите на свой сервер по SSH и выполните:

    cd /var/discourse
    git pull
    ./launcher rebuild app

Я следовал руководству по обновлению Discourse и образа Docker до последней версии с помощью консольных команд. Однако мне не удалось успешно выполнить обновление из-за ошибки.

Вот сообщение об ошибке, которое я получил при выполнении команды ./launcher rebuild app.

> FAILED
> --------------------
> Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 671 exit 1>
> Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
> exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
> 9c3a1b4a72818216aaafa5de742f7d1a325aa61497ea49f5b4f1660c6e503fd0
> ** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
> ./discourse-doctor may help diagnose the problem.

Мой Droplet от Digital Ocean имеет 2 ГБ ОЗУ / 50 ГБ диска + 50 ГБ / SFO2 — Discourse на Ubuntu 20.04.

Спасибо, что нашли время прочитать мой пост! Я с нетерпением жду вашего ответа.

Добро пожаловать, @nelly! Извините, что у вас возникли проблемы! Это большая неожиданность. РЕДАКТИРОВАНИЕ: Это немного неожиданно.

У вас есть какие-либо пользовательские плагины или темы?

Не могли бы вы прокрутить вверх и вставить сюда фактические сообщения об ошибках?

Спасибо, @pfaffman! Благодарю за ваш ответ. Да, у меня есть несколько пользовательских тем и плагинов.

Вот плагины, которые у меня установлены:

      - git clone https://github.com/discourse/docker_manager.git
      - git clone https://github.com/paviliondev/discourse-custom-wizard.git
      - git clone https://github.com/discourse/discourse-spoiler-alert.git
      - git clone https://github.com/paviliondev/discourse-landing-pages.git
      - git clone https://github.com/discourse/discourse-patreon.git
      - git clone https://github.com/discourse/discourse-reactions.git

Я не уверен, как получить доступ к пользовательским темам или удалить их.

Рафаэль,

Вот что я вижу непосредственно перед ошибкой «failed»:

rake aborted!
NameError: undefined local variable or method `name' for main:Object
/var/www/discourse/lib/tasks/assets.rake:251:in `rescue in block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:240:in `block (2 levels) in <main>'

Caused by:
OpenURI::HTTPError: 401 Error: Invalid license key
/var/www/discourse/lib/file_helper.rb:63:in `block in download'
/var/www/discourse/lib/final_destination.rb:422:in `block (3 levels) in safe_get'
/var/www/discourse/lib/final_destination.rb:421:in `catch'
/var/www/discourse/lib/final_destination.rb:421:in `block (2 levels) in safe_get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/mini_profiler/profiling_methods.rb:46:in `step'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/net_patches.rb:18:in `request_with_mini_profiler'
/var/www/discourse/lib/final_destination.rb:393:in `block in safe_get'
/var/www/discourse/lib/final_destination.rb:437:in `block in safe_session'
/var/www/discourse/lib/final_destination.rb:434:in `safe_session'
/var/www/discourse/lib/final_destination.rb:385:in `safe_get'
/var/www/discourse/lib/final_destination.rb:134:in `get'
/var/www/discourse/lib/file_helper.rb:55:in `download'
/var/www/discourse/lib/discourse_ip_info.rb:39:in `mmdb_download'
/var/www/discourse/lib/tasks/assets.rake:242:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:241:in `each'
/var/www/discourse/lib/tasks/assets.rake:241:in `block (2 levels) in <main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
I, [2021-05-02T20:17:42.823237 #1]  INFO -- : Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

Надеюсь, это поможет. Заранее спасибо!

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

Джей,

Вот вывод. Я сильно его сократил, чтобы форум позволил опубликовать его.

2021-05-03 00:32:20.635 UTC [63] postgres@postgres ERROR:  база данных "discourse" уже существует
2021-05-03 00:32:20.635 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: ошибка: создание базы данных не удалось: ERROR:  база данных "discourse" уже существует
I, [2021-05-03T00:32:20.639714 #1]  INFO -- : 
I, [2021-05-03T00:32:20.640335 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2021-05-03 00:32:20.760 UTC [74] postgres@discourse ERROR:  роль "discourse" уже существует
2021-05-03 00:32:20.760 UTC [74] postgres@discourse STATEMENT:  create user discourse;
ERROR:  роль "discourse" уже существует

I, [2021-05-03T00:32:21.634456 #1]  INFO -- : Файл > /etc/service/redis/run  chmod: +x  chown: 
I, [2021-05-03T00:32:21.640838 #1]  INFO -- : Файл > /etc/service/redis/log/run  chmod: +x  chown: 
I, [2021-05-03T00:32:21.646998 #1]  INFO -- : Файл > /etc/runit/3.d/10-redis  chmod: +x  chown: 
I, [2021-05-03T00:32:21.648588 #1]  INFO -- : Замена daemonize yes на пустое значение в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.650175 #1]  INFO -- : Замена (?-mix:^pidfile.*$) на пустое значение в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.651303 #1]  INFO -- : > install -d -m 0755 -o redis -g redis /shared/redis_data
I, [2021-05-03T00:32:21.656597 #1]  INFO -- : 
I, [2021-05-03T00:32:21.657900 #1]  INFO -- : Замена (?-mix:^logfile.*$) на logfile "" в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.659157 #1]  INFO -- : Замена (?-mix:^bind .*$) на пустое значение в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.660353 #1]  INFO -- : Замена (?-mix:^dir .*$) на dir /shared/redis_data в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.661652 #1]  INFO -- : Замена (?-mix:^protected-mode yes) на protected-mode no в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.662825 #1]  INFO -- : Замена # io-threads 4 на io-threads $redis_io_threads в /etc/redis/redis.conf
I, [2021-05-03T00:32:21.663908 #1]  INFO -- : > echo redis установлен
I, [2021-05-03T00:32:21.668192 #1]  INFO -- : redis установлен
I, [2021-05-03T00:32:21.669144 #1]  INFO -- : > cat /etc/redis/redis.conf | grep logfile
I, [2021-05-03T00:32:21.679111 #1]  INFO -- : logfile ""
I, [2021-05-03T00:32:21.680077 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2021-05-03T00:32:21.683045 #1]  INFO -- : > sleep 10
167:C 03 May 2021 00:32:21.698 # oO0OoO0OoO0Oo Redis запускается oO0OoO0OoO0Oo
167:C 03 May 2021 00:32:21.698 # Версия Redis=6.2.1, биты=64, коммит=00000000, изменено=0, pid=167, только что запущен
167:C 03 May 2021 00:32:21.699 # Конфигурация загружена
167:M 03 May 2021 00:32:21.700 * монотонные часы: POSIX clock_gettime
167:M 03 May 2021 00:32:21.702 * Режим работы=standalone, порт=6379.
167:M 03 May 2021 00:32:21.702 # Сервер инициализирован
167:M 03 May 2021 00:32:21.703 # ПРЕДУПРЕЖДЕНИЕ: overcommit_memory установлен в 0! Фоновое сохранение может завершиться неудачей при нехватке памяти. Чтобы исправить эту проблему, добавьте 'vm.overcommit_memory = 1' в /etc/sysctl.conf, затем перезагрузите систему или выполните команду 'sysctl vm.overcommit_memory=1', чтобы изменения вступили в силу.
I, [2021-05-03T00:32:41.096190 #1]  INFO -- : > cd /var/www/discourse && bash -c "touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log"
terser '/var/www/discourse/public/assets/_vendor-892d5a1f7dfb58e3f80950989c67133fd6062344153d17e67db8ba3d126c7a1a.js' -m -c -o '/var/www/discourse/public/assets/vendor-892d5a1f7dfb58e3f80950989c67133fd6062344153d17e67db8ba3d126c7a1a.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/vendor-892d5a1f7dfb58e3f80950989c67133fd6062344153d17e67db8ba3d126c7a1a.js.map'"
****************************************************************************************************
#<Thread:0x000055a7feb17780 /var/www/discourse/lib/tasks/assets.rake:239 run> завершен с ошибкой (report_on_exception = true):
/var/www/discourse/lib/tasks/assets.rake:251:in `rescue in block (2 levels) in <main>': неопределенная локальная переменная или метод `name' для main:Object (NameError)
	from /var/www/discourse/lib/tasks/assets.rake:240:in `block (2 levels) in <main>'
/var/www/discourse/lib/file_helper.rb:63:in `block in download': 401 Ошибка: Неверный ключ лицензии (OpenURI::HTTPError)

Надеюсь, это поможет!

Есть ли в вашем файле app.yml строка с лицензионным ключом MaxMind? Попробуйте удалить её и пересобрать проект.

Спасибо! Похоже, это помогло, хотя бы отчасти. Когда я захожу на главную страницу форума, меня перекидывает на страницу «Поздравляем, вы установили Discourse!». Вот мои вопросы:

Мне нужно переустановить форум? Останется ли мой существующий контент или всё было удалено?

Звучит так, будто всё было удалено, но, скорее всего, оно всё ещё там. Это ваше первое обновление за долгое время? Был ли обновлён ваш PostgreSQL? Мое предположение: что-то пошло не так при обновлении PostgreSQL, и вам нужно переименовать postgres_old и начать заново. Подробнее об этом в статье Обновление PostgreSQL 13.

Джей, я только что вспомнил, что пытался переместить загрузки и резервные копии в блок-хранилище DigitalOcean. Только что я попытался сделать это снова и получил сообщение об ошибке «Ой» при переходе на главную страницу:

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

Подробная информация об ошибке была записана в журнал, и автоматически сформировано уведомление. Мы разберёмся с этим.

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

Вот команды, которые я выполнил:

mv /var/discourse/shared/standalone/postgres_data /var/postgres_data_discourse
mv /var/discourse/shared /mnt/discourse-sfo2-01

В файл app.yml я добавил следующее:

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /mnt/discourse-sfo2-01/shared/standalone
      guest: /shared
  - volume:
      host: /mnt/discourse-sfo2-01/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/postgres_data_discourse
      guest: /shared/postgres_data

Все команды выполнялись через ./launcher rebuild app без ошибок.

Прошу прощения у всех. Я забыл, что уже делал это. Уверен, что именно это, скорее всего, и вызывает проблемы.

У меня это тоже сработало после неудачной пересборки — в чём тут проблема? Спасибо!