Можно ли это исправить до следующего релиза, пожалуйста! Я тестирую развёртывание новых VPS (каждый раз с разным IP), и оно всё ещё не удаётся в двух случаях из трёх.
Обратите внимание, что мы только что выпустили быстрое исправление, которое предотвращает сбой пересборки при ошибке загрузки баз данных MaxMind.
После выпуска Discourse 3.3 мы вернёмся к вопросу о том, как сделать загрузку баз данных MaxMind менее подверженной ошибкам.
Хм, у меня всё ещё происходит сбой (чистая установка, не пересборка)?
I, [2024-07-30T05:19:47.753779 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'
Очистка временных файлов
Упаковка ресурсов
I, [2024-07-30T05:19:58.764890 #1059] INFO -- : Запись /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2024-07-30T05:19:58.787966 #1059] INFO -- : Запись /var/www/discourse/public/assets/service-worker-77c5660ded6e2c94a6a5ce2594411b46d0e15a1f5b9065e57b85652d7cbe3ead.js
I, [2024-07-30T05:19:58.797458 #1059] INFO -- : Запись /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
I, [2024-07-30T05:19:58.807019 #1059] INFO -- : Запись /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
rake aborted!
Zlib::BufError: ошибка буфера (Zlib::BufError)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cache/file_store.rb:100:in `<<'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cache/file_store.rb:100:in `set'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cache.rb:212:in `set'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cache.rb:136:in `set'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/loader.rb:243:in `store_asset'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/loader.rb:185:in `load_from_unloaded'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/loader.rb:60:in `block in load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/loader.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/cached_environment.rb:47:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/base.rb:66:in `find_asset'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/manifest.rb:134:in `block in find'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/manifest.rb:133:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/manifest.rb:133:in `find'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/sprockets/manifest.rb:186:in `compile'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-rails-3.5.1/lib/sprockets/rails/task.rb:67:in `block (3 levels) in define'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-3.7.3/lib/rake/sprocketstask.rb:147:in `with_logger'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sprockets-rails-3.5.1/lib/sprockets/rails/task.rb:66:in `block (2 levels) in define'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Задачи: TOP => assets:precompile
(Полный трассировочный отчёт можно получить, запустив задачу с флагом --trace)
I, [2024-07-30T05:20:01.382260 #1] INFO -- : Загрузка MaxMindDB...
I, [2024-07-30T05:20:01.438870 #1] INFO -- : Завершение асинхронных процессов
I, [2024-07-30T05:20:01.444360 #1] INFO -- : Отправка сигнала INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 57
2024-07-30 05:20:01.448 UTC [57] LOG: получен запрос быстрого завершения
I, [2024-07-30T05:20:01.449248 #1] INFO -- : Отправка сигнала TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 120
120:signal-handler (1722316801) Получен SIGTERM, планирование завершения...
2024-07-30 05:20:01.512 UTC [57] LOG: прерывание всех активных транзакций
120:M 30 Jul 2024 05:20:01.523 # Пользователь запросил завершение...
120:M 30 Jul 2024 05:20:01.526 * Сохранение финального снимка RDB перед выходом.
2024-07-30 05:20:01.566 UTC [57] LOG: фоновый рабочий "запускщик логической репликации" (PID 72) завершил работу с кодом выхода 1
120:M 30 Jul 2024 05:20:01.586 * База данных сохранена на диск
120:M 30 Jul 2024 05:20:01.589 # Redis готов к выходу, до свидания...
2024-07-30 05:20:01.598 UTC [67] LOG: завершение работы
2024-07-30 05:20:02.090 UTC [57] LOG: система баз данных завершена
FAILED
--------------------
Pups::ExecError: команда cd /var/www/discourse && su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile' завершилась с ошибкой, код возврата #<Process::Status: pid 1057 exit 1>
Место возникновения ошибки: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
выполнение завершено с ошибкой с параметрами {"cd"=>"$home", "tag"=>"precompile", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'"]}
загрузка завершена с кодом выхода 1
** НЕ УДАЛОСЬ ЗАГРУЗИТЬСЯ ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
c9da27502f7c288ec5465ca82b4830123a3c59003527b8f288457c594576adaa
обнаружена архитектура x86_64.
Подтвердите, пожалуйста, что вы следовали инструкциям по адресу discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub и у вас есть действительные учетные данные для MaxMind?
Да, стандартная установка, действительные account_id и license_key MaxMind в app.yml
Просто для подтверждения: вы находитесь на ветке tests-passed, а не stable? Я только что протестировал это с некорректным ключом MaxMind и не вижу никаких ошибок.
Не уверен, что проблема всё ещё связана с неверными учётными данными, но пересборка имеет тенденцию завершаться неудачей даже при правильных учётных данных.
Да
Точно, я использую действительный ключ! (Вторая попытка только что, новый VPS, другой IP-адрес, всё равно завершается неудачей с той же ошибкой).
При обновлении Docker из админ-панели возникла ошибка. Возможно, проблема вызвана созданными файлами. Эта ошибка всегда возникает одинаково, и мы не получаем ошибку, когда отключаем MaxMind. Между этими двумя структурами есть проблема, и они влияют друг на друга:
Я начинаю думать, что Maxmind здесь — это отвлекающий манёвр. Стек вызовов вообще не указывает на Maxmind, а сигнализирует об ошибке, возникшей в sprockets. Мне придётся углубиться в расследование, чтобы проверить, смогу ли я воспроизвести это на droplet.
Я тоже так думаю. MaxMind, возможно, не является проблемой, но его деятельность выдвигает на первый план проблемы в некоторых областях.
Вы запускаете это на DigitalOcean? Если да, можете сообщить, сколько vCPU и оперативной памяти вы выбрали?
Нет, у меня свой сервер, а PostgreSQL находится на отдельном сервере. Я сделал заметку здесь, вы можете ознакомиться с ней:
Сколько оперативной памяти и процессорных ресурсов есть на вашем сервере? Я пытаюсь воспроизвести эту проблему и многократно пересоздавал свой droplet, но не могу столкнуться с ошибкой.
25 ГБ ОЗУ для основного сервера
20 ГБ ОЗУ для сервера PostgreSQL
8 процессоров
4 ядра процессора
db_shared_buffers: "4096MB"
UNICORN_WORKERS: 8
UNICORN_SIDEKIQ_MAX_RSS: 1500
## Плагины размещаются здесь
## подробности см. по адресу https://meta.discourse.org/t/19157
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-question-answer.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-gamification.git
- git clone https://github.com/discourse/discourse-restricted-replies.git
- git clone https://github.com/discourse/discourse-saved-searches.git
- git clone https://github.com/discourse/discourse-follow.git
# - git clone https://github.com/discourse/discourse-yearly-review.git
- git clone https://github.com/discourse/discourse-voting.git
- git clone https://github.com/discourse/discourse-no-bump.git
- git clone https://github.com/discourse/discourse-math.git
- git clone https://github.com/discourse/discourse-akismet.git
- git clone https://github.com/discourse/discourse-adplugin.git
- git clone https://github.com/spirobel/discourse-matheditor.git
- git clone https://github.com/discourse/discourse-google-one-tap.git
- git clone https://github.com/discourse/discourse-ai.git
# - git clone https://github.com/paviliondev/discourse-custom-wizard.git
- git clone https://github.com/discourse/discourse-reactions.git
- git clone https://github.com/discourse/discourse-subscriptions.git
- git clone https://github.com/discourse/discourse-assign.git
# - git clone https://github.com/discourse/discourse-policy.git
- git clone https://github.com/discourse/discourse-data-explorer.git
# - git clone https://github.com/merefield/discourse-chatbot.git
# after_assets_precompile:
# - exec:
# cd: $home
# cmd:
# - sudo -E -u discourse bundle exec rake s3:upload_assets
# - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
# - sudo -E -u discourse bundle exec rake uploads:migrate_to_s3
Сегодня у меня возникла эта проблема на машине, где, кажется, 16 ГБ оперативной памяти (хотя запущены и другие процессы), и 12 или более потоков (точные цифры я смогу узнать завтра). Похоже, что MaxMind — это ложная зацепка, но каждый раз отключение MaxMind решает проблему (так я поступил сегодня).
Но теперь и вы, и я попробовали добавить блок rescue в функцию MaxMind, и это не помогло.
Возможно, дело в чём-то, что происходит в процессе precompile до этого?
У меня есть сомнения по поводу этого: assets:precompile
Следуя этой последовательности событий и анализируя инциденты, произошедшие между ними, мы можем получить некоторое представление:
Упаковка ассетов
…
Загрузка MaxMindDB..
… (Возможно, ошибка где-то между ними)
assets:precompile
Я только что осознал, что мы загружаем базы данных Maxmind в фоновом потоке одновременно с выполнением assets:precompile. Исходя из полученных трассировок стека, у меня есть гипотеза, что фоновый поток, используемый для загрузки базы данных Maxmind, каким-то образом влияет на assets:precompile.
Сначала я выпущу исправление выше и не буду углубляться в корневую причину, поскольку мы планируем перенести загрузку баз данных Maxmind из процесса сборки.
Звучит как отличная идея. Завтра я попробую снова включить MaxMind на нескольких сайтах.
Могу ли я проверить это сейчас? Потому что когда обновление от администратора выдало ошибку, я попытался сделать это через SSH, но там тоже возникла ошибка. Если вы расскажете, как это сделать, я смогу попробовать в первый раз.


