При установке на основе Docker и настройке DISCOURSE_MAXMIND_LICENSE_KEY процесс создания образа прерывается с ошибкой:
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)
filename = File.basename(gz_file.path)
^^^^^
from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
Если оставить DISCOURSE_MAXMIND_LICENSE_KEY пустым, всё работает корректно.
Протестировано на версиях: stable и tests-passed.
Лицензия MaxMind работает — оба URL предоставляют доступ к файлам .mmdb:
Только догадка (я не специалист по Ruby, так что будьте снисходительны) — возможно, расширение .mmdb вызывает проблемы в FileHelper.download(...) несколькими строками ниже:
Добавление “.mmdb” к ссылкам выше приводит к ошибке Invalid edition ID.
Поскольку у меня возникла та же проблема, я могу подтвердить, что после очистки ключа лицензии мои проблемы с пересборкой волшебным образом исчезают.
Даже в течение нескольких дней я старался как мог разобраться в проблеме.
Думаю, я понял суть, но могу и ошибаться.
Во время сборки, похоже, отсутствуют файлы mmdb. Возможно, это связано с тем, что их нет в базовом образе, или, что более вероятно, они удаляются и/или не загружаются до момента их использования, из-за чего сборка завершается с ошибкой.
Теперь, когда я об этом подумал, вызов mmdb_download указывает на код, пытающийся загрузить файл.
Я успешно загрузил файлы вручную (изнутри контейнера Docker) с помощью wget, так что лицензия работает как положено.
Хочу напомнить, что эта проблема всё ещё актуальна: у меня возникла точно такая же ситуация при добавлении ключа и раскомментировании настройки в app.yml.
При обновлении с основной ветки сегодня появилось следующее сообщение:
Загрузка MaxMindDB... Для обновлений базы данных IP-адресов MaxMind требуется лицензия. Установите переменную DISCOURSE_MAXMIND_LICENSE_KEY на значение, сгенерированное вами по адресу https://www.maxmind.com. Для обновлений базы данных IP-адресов MaxMind требуется лицензия. Установите переменную DISCOURSE_MAXMIND_LICENSE_KEY на значение, сгенерированное вами по адресу https://www.maxmind.com
Однако я никогда не настраивал ключ лицензии для этого и не знаю, как вообще его интегрировать.
Обновление всё же завершилось, так что, похоже, это не вызывает никаких проблем, но, возможно, это какой-то незначительный сбой.
Можете выложить точную ошибку, которую вы видите? За последние 24 часа было внесено связанное изменение, поэтому я подозреваю, что у вас может быть немного другая проблема, чем у автора оригинального поста (если вы находитесь на ветке tests-passed):
****************************************************************************************************
Не удалось загрузить MaxMindDB (GeoLite2-City): ошибка 400
****************************************************************************************************
Сообщение
Не удалось загрузить MaxMindDB (GeoLite2-City): ошибка 400
Трассировка стека
/var/www/discourse/lib/tasks/maxminddb.rake:83:in `rescue in block (2 levels) in <main>'
/var/www/discourse/lib/tasks/maxminddb.rake:70:in `block (2 levels) in <main>'
Я только что столкнулся с этим сам на собственном хостинге. Ниже приведены выдержки из логов обновления.
Остановка 2 воркеров Unicorn для освобождения памяти
Остановка очереди задач для освобождения памяти, pid мастер-процесса 2132120
$ cd /var/www/discourse/plugins/docker_manager && git fetch --tags --prune-tags --prune --force
$ cd /var/www/discourse/plugins/docker_manager && git reset --hard HEAD@{upstream}
HEAD теперь указывает на dec486d Обновление переводов (#213)
$ bundle install --retry 3 --jobs 4
Bundle complete! 137 зависимостей в Gemfile, сейчас установлено 170 gems.
Gems из групп 'development' и 'test' не были установлены.
Установленные gems находятся в `./vendor/bundle`
[...]
- dist/javascripts/squoosh/squoosh_resize.js: 4.53 кБ (1.29 кБ сжатых gzip)
Готово за 89.56 с.
Очистка временных файлов
Упаковка ассетов
Загрузка MaxMindDB...
#<Thread:0x00007fe9902157b0 /var/www/discourse/lib/tasks/maxminddb.rake:62 run> завершен с исключением (report_on_exception = true):
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)
filename = File.basename(gz_file.path)
^^^^^
from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
Пропуск: break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js уже сжат
Пропуск: service-worker-fadf8e4b5a6844dadaf6c3f1fb335fdd9dcb030f2bc22fcb96537679dfd2fa2d.js уже сжат
Сжатие: locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js > /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js.gz
Сжатие JavaScript и генерация исходных карт
[...]
целевая точка компиляции: color_definitions Light (Light)
целевая точка компиляции: color_definitions Light (air-light)
целевая точка компиляции: color_definitions Light (air-dark)
целевая точка компиляции: color_definitions Light (Base)
целевая точка компиляции: desktop_theme Dark
целевая точка компиляции: mobile_theme Dark
целевая точка компиляции: color_definitions Dark (Simple Dark)
целевая точка компиляции: color_definitions Dark (air-light)
целевая точка компиляции: color_definitions Dark (air-dark)
целевая точка компиляции: color_definitions Dark (Base)
Компиляция CSS завершена: 2024-05-15 18:13:29 UTC
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)
filename = File.basename(gz_file.path)
^^^^^
from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬСЯ
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:210:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:111: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.2.0/gems/railties-7.0.8.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/commands.rb:18:in `<main>'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Запуск 2 остановленных изначально воркеров Unicorn
У меня уже некоторое время наблюдается та же проблема, и мне пришлось отключить интеграцию с MaxMind, чтобы выполнить сборку заново.
Кажется, что проблема была исправлена по крайней мере в ветке tests-passed, но я использую последнюю стабильную версию (3.2.2), поэтому предположил, что придётся ждать. Однако есть отчёт о той же проблеме в версии 3.3.0, поэтому, возможно, здесь требуется более внимательный анализ.
Пересборка завершилась без видимых ошибок. Сайт работает. К сожалению, пока в discourse_docker не будет выгружен новый коммит, я не могу проверить обновление через панель администратора, чтобы увидеть, решило ли это проблему.
Редактирование: Похоже, что хотя пересборка прошла успешно, MaxMind не работает.
Я тоже пробовал это, но добавление DISCOURSE_MAXMIND_ACCOUNT_ID не помогло — пересборка всё равно не завершается (с последней стабильной версией). Работает только пропуск DISCOURSE_MAXMIND_LICENSE_KEY.
Лог
...
Done compiling CSS: 2024-05-15 20:34:22 UTC
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)
filename = File.basename(gz_file.path)
^^^^^
from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
I, [2024-05-15T20:34:22.860678 #1] INFO -- : Checking 'Category Icons' for 'default'... up to date
Checking 'discourse-profile-custom-link' for 'default'... up to date
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1399 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"precompile", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** 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.