При обновлении постоянно возникают ошибки

Неважно, сколько раз я пытаюсь обновить, я всегда получаю Извините, произошла ошибка при обновлении Discourse. Пожалуйста, проверьте логи ниже. при обновлении через браузер. Мне всегда приходится полагаться на Терминал, и это не хорошо, потому что тогда мой форум будет недоступен около 30 минут.

Если кто-то сможет помочь мне здесь, я буду признателен.

Ошибки:

Сводка
********************************************************
*** Пожалуйста, будьте терпеливы, следующие шаги могут занять время ***
********************************************************
Перезапуск Unicorn для освобождения памяти
Перезапуск unicorn pid: 603
Ожидание перезагрузки Unicorn.
Ожидание перезагрузки Unicorn..
Ожидание перезагрузки Unicorn...
Ожидание перезагрузки Unicorn....
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Ожидание перезагрузки Unicorn..........
Ожидание перезагрузки Unicorn...........
Ожидание перезагрузки Unicorn............
Ожидание перезагрузки Unicorn.............
Ожидание перезагрузки Unicorn..............
Ожидание перезагрузки Unicorn...............
Ожидание перезагрузки Unicorn................
Ожидание перезагрузки Unicorn.................
Ожидание перезагрузки Unicorn..................
Ожидание перезагрузки Unicorn...................
Ожидание перезагрузки Unicorn....................
Ожидание перезагрузки Unicorn.....................
Ожидание перезагрузки Unicorn......................
Ожидание перезагрузки Unicorn.......................
Ожидание перезагрузки Unicorn........................
Ожидание перезагрузки Unicorn.........................
Ожидание перезагрузки Unicorn..........................
Ожидание перезагрузки Unicorn...........................
Ожидание перезагрузки Unicorn............................
Ожидание перезагрузки Unicorn.............................
Ожидание перезагрузки Unicorn..............................
Ожидание перезагрузки Unicorn...............................
$ cd /var/www/discourse && git reset --hard HEAD@{upstream}
HEAD now at fe1b1edba FIX: removes + from RTE toggle tooltip (#33542)
$ bundle install --retry 3 --jobs 4
Bundle complete! 143 Gemfile dependencies, 190 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
3 installed gems you directly depend on are looking for funding.
  Run `bundle fund` for details
$ if [ -f yarn.lock ]; then yarn install; else CI=1 pnpm install; fi
Scope: all 16 workspace projects
Lockfile is up to date, resolution step is skipped
Already up to date

Done in 9.1s using pnpm v9.15.6
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-adplugin is already at latest compatible version
discourse-categories-suppressed is already at latest compatible version
discourse-doc-categories is already at latest compatible version
Invalid version list in /var/www/discourse/plugins/discourse-landing-pages
discourse-landing-pages is already at latest compatible version
discourse-solved is already at latest compatible version
docker_manager is already at latest compatible version
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Multisite migrator is running using 1 threads

Migrating default
Seeding default
*** Bundling assets. This will take a while *** 
$ bundle exec rake themes:update assets:precompile
Updating themes with concurrency: 10
[db:default] 'New Topic Header Button' -  checking...
[db:default] 'New Topic Header Button' -  up to date
[db:default] 'Category Banners' -  checking...
[db:default] 'Category Banners' -  up to date
[db:default] 'Clickable Topic' -  checking...
[db:default] 'Clickable Topic' -  up to date
[db:default] 'Tag Banners' -  checking...
[db:default] 'Tag Banners' -  up to date
[db:default] 'Breadcrumb Links' -  checking...
[db:default] 'Breadcrumb Links' -  up to date
[db:default] 'Welcome Link Banner' -  checking...
[db:default] 'Welcome Link Banner' -  up to date
[db:default] 'Tag Icons' -  checking...
[db:default] 'Tag Icons' -  up to date
[db:default] 'Social Share' -  checking...
[db:default] 'Social Share' -  up to date
[db:default] 'Navigation Menu Display Control' -  checking...
[db:default] 'Navigation Menu Display Control' -  up to date
[db:default] 'DiscoTOC' -  checking...
Node.js heap_size_limit is less than 2048MB. Setting --max-old-space-size=2048 and CHEAP_SOURCE_MAPS=1
Existing build is not reusable.
- Existing: {"ember_env"=>"production", "core_tree_hash"=>"c71c1ad482ff7f24c3ad3a76d5a521861f29e1fb"}
- Current: {"ember_env"=>"production", "core_tree_hash"=>"d026d5621e9421eaf67123aab7361a44f0fa9c31"}
Running full core build...
Building
Environment: production
The setting 'staticAddonTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTrees: true' in your Embroider config.
The setting 'staticAddonTestSupportTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTestSupportTrees: true' in your Embroider config.
building...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: pretty-text > applyPatches]
...[Babel: @ember/legacy-built-in-components > applyPatches]
...[Babel: ember-source > applyPatches]
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js as it exceeds the max of 500KB.
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js as it exceeds the max of 500KB.
...[Babel: @glimmer/component > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: dialog-holder > applyPatches]
...[Babel: ember-this-fallback > applyPatches]
...[Babel: ember-buffered-proxy > applyPatches]
...[Babel: ember-cache-primitive-polyfill > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command was killed with SIGKILL (Forced termination): ember build -prod
/var/www/discourse/script/assemble_ember_build.rb:103:in `system': Command failed with exit 1: pnpm (RuntimeError)
	from /var/www/discourse/script/assemble_ember_build.rb:103:in `<main>'
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:211:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:112:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/execution_wrapper.rb:91:in `wrap'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:70:in `conditional_executor'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:71:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:149:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:69:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Spinning up 1 Unicorn worker(s) that were stopped initially

Вам нужно увеличить файл подкачки.
У меня была такая же проблема. Это помогло.

Можете объяснить, как это сделать? Я с этим не знаком. Помню, кто-то упоминал об этом, но я не думаю, что вносил какие-либо изменения (хотя, похоже, я их действительно не делал, и именно это вызывает проблему). Спасибо.

Рекомендую выполнить обновление через командную строку

cd /var/discourse
./launcher rebuild app

Возможно, у вас всё ещё будут проблемы с памятью. Если это не сработает, укажите ошибку и вывод команды

free -h

РЕДАКТИРОВАНИЕ: Ой. Извините, я не прочитал достаточно внимательно:

Нужно добавить файл подкачки (swap). Я делаю это так:

cd /var/discourse
grep swap discourse-setup

Тогда вы увидите команды, которые discourse-setup использует для создания пространства подкачки.

Затем можно выполнить что-то вроде:

./launcher stop app # если не остановить, вероятно, нельзя будет отключить swap
swapoff /swapfile # теперь вы узнали, что имя файла — /swapfile
fallocate -l -4G /swapfile # скорректировано по сравнению с выводом
mkswap /swapfile # это «форматирует» раздел подкачки

Можно пропустить остальное, связанное с добавлением в fstab и подобное, и просто включить его обратно:

swapon /swapfile
./launcher start app

Затем вы можете проверить это с помощью

free -h

Если у вас нет файла подкачки, вы можете запустить ./discourse-setup, и он добавит его за вас; вы можете прервать процесс, нажав Ctrl+C, когда он начнёт задавать вопросы.

Используйте Google или YouTube:
“Linux swap file”

Вот руководство Digital Ocean:

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

https://meta.discourse.org/search?context=topic&context_id=373634&q=Node.js%20heap_size_limit%20is%20less%20than%202048MB&skip_context=true

Обновления
После нескольких разговоров с Claude вот что происходит:

Сначала у меня было так:

sudo swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   1G   -2

Это всё ещё вызывало ошибку.

Так что я смог увеличить его до 4 ГБ, насколько я понимаю:

sudo swapon --show
NAME      TYPE SIZE   USED PRIO
/swapfile file   4G 714.4M   -2

Теперь вот что странно: пока я это делал, я вернулся на страницу обновлений и, к моему удивлению, всё обновилось…
Как это возможно, если мне показывали эту ошибку? :confused:

В любом случае, я теперь хотя бы понимаю, что файл подкачки связан с дисковым пространством, а не с оперативной памятью. Я использую droplet от DigitalOcean с 1 ГБ ОЗУ и 25 ГБ диска.

Так что, думаю, наличие файла подкачки объёмом 4 ГБ пока нормально?
Но всё же, почему обновление прошло, даже после показа этой ошибки?

Swap-файл — это способ использовать часть вашего дискового пространства в качестве очень, очень медленной оперативной памяти, поэтому он связан как с дисковым пространством, так и с оперативной памятью.

25 ГБ — это лишь минимально достаточный объем. Вам потребуется выполнить ./launcher cleanup перед почти каждым обновлением через командную строку.

Я имел в виду, что, когда я читал обсуждения, и люди говорили «создать файл подкачки 2 ГБ», я думал, что это связано с объёмом оперативной памяти. В моём случае я не мог бы этого сделать, так как у меня всего 1 ГБ оперативной памяти. Теперь я понимаю, что файл подкачки — это на самом деле дисковое пространство, почти как создание небольшого раздела. Да, они связаны, потому что «общаются» друг с другом при необходимости, но в своём комментарии я был более буквальным.

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

То есть вы говорите, что перед каждым обновлением, даже при использовании панели администратора, мне следует запускать ./launcher cleanup через терминал?

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

Всё это немного сбивает меня с толку…
Некоторые люди говорили, что у них была та же проблема, что и у меня, и создание файла подкачки размером 2 ГБ им помогло. Я сейчас создал файл подкачки размером 4 ГБ, но это было после обновления, так что мне придётся подождать следующего обновления, чтобы проверить это.

Так, например, если я увеличу оперативную память до 2 ГБ, будет ли этого достаточно, даже если место на диске всё ещё составляет 25 ГБ?

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

Машины с 1 ГБ ОЗУ и 4 ГБ файла подкачки должно быть достаточно.

Лично я бы порекомендовал начать с как минимум 2 ГБ ОЗУ и 2 ГБ файла подкачки, но вы уже соответствуете опубликованным минимальным требованиям для стандартной установки.

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

Теперь у вас не должно быть проблем с памятью.

За исключением того, что, как вы и сказали, HDD довольно быстро заполнится, и очистка обязательна независимо от того, сколько у вас оперативной памяти.

Спасибо. Пока я просто хочу начать добавлять контент и пользователей, пока не станет целесообразно перейти на более мощный тариф.

Кстати, всё ещё по теме места на диске: когда я всё проверял, я заметил, что использую около 18 ГБ, и когда я спросил об этом ChatGPT, он сказал, что для Discourse это нормально?

Если это так, то мой сервер на 25 ГБ будет использовать 18 ГБ для установки + 4 ГБ для файла подкачки, и у меня останется не так много свободного места. Можете ли вы это подтвердить?

Я не собираюсь спорить с твоим роботом.

Ты прав, что 4 ГБ вычтутся из доступного места на диске (конечно).

Я только что проверил все папки и заметил, что эта папка занимает 12 ГБ:

/var/lib/docker/overlay2/

Что это такое и можно ли уменьшить её размер, удалив ненужные файлы?

Возможно, стоит посмотреть предыдущую тему
Обновление Discourse не удаётся из-за недостатка места на диске на Droplet с 25 ГБ

Также, возможно, эта тема

Возможно, кто-то мог бы сказать что-то вроде:

Без дополнительного контекста ваш первоначальный комментарий был не очень полезен для меня. Я не ожидал, что Discourse будет занимать 18 ГБ дискового пространства, когда другие платформы, такие как phpBB, значительно легче (не будучи экспертом, я не знаю, почему одна платформа легче другой, но, очевидно, они отличаются). Поэтому, когда вы сказали, что 25 ГБ едва хватает, не добавив больше контекста, и при этом на официальной странице установки ничего не сказано о том, что Discourse займёт, возможно, N гигабайт, я предположил, что стандартный тариф Digital Ocean с 1 ГБ ОЗУ и 25 ГБ диска более чем достаточен, и, возможно, более крупные сообщества будут испытывать трудности только с 25 ГБ. Поскольку мой проект находится лишь в начале пути, я не считал дисковое пространство проблемой.

Надеюсь, это имеет смысл.