Не удалось загрузить MaxMind DB с валидным ключом, но можно загрузить DB изнутри контейнера

Сборка не удалась из-за этого. Я удалил переменную окружения ENV и пересобрал проект без неё. Затем перешёл к отладке внутри контейнера, где добавил ключ в discourse.conf, но ошибка всё ещё сохраняется.

(К счастью, я сделал это до того, как сообщить клиенту, что он предоставил недействительный ключ!)

Я добавил puts в задачу rake, чтобы вывести URL, с которого пытается загрузиться база данных:

    url =
      "https://download.maxmind.com/app/geoip_download?license_key=#{GlobalSetting.maxmind_license_key}&edition_id=#{name}&suffix=tar.gz"

    gz_file =
      FileHelper.download(
        url,
        max_file_size: 100.megabytes,
        tmp_file_name: "#{name}.gz",
        validate_uri: false,
        follow_redirect: false,
      )

    if gz_file.nil?
      puts "no gzfile"
    end
    puts "Got file #{gz_file} for #{url}"
    filename = File.basename(gz_file.path)

Теперь я вижу следующее:

root@web-only:/var/www/discourse# rake maxminddb:get
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
Downloading MaxMindDb's GeoLite2-City...
no gzfile
Got file  for https://download.maxmind.com/app/geoip_download?license_key=VALID_KEY_IS_HERE&edition_id=GeoLite2-City&suffix=tar.gz
rake aborted!
NoMethodError: undefined method `path' for nil:NilClass (NoMethodError)

    filename = File.basename(gz_file.path)
                                    ^^^^^
/var/www/discourse/lib/discourse_ip_info.rb:52:in `mmdb_download'
/var/www/discourse/lib/tasks/maxminddb.rake:9:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/maxminddb.rake:7:in `each'
/var/www/discourse/lib/tasks/maxminddb.rake:7:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => maxminddb:get
(See full trace by running task with --trace)

Была другая тема, где проблема заключалась в том, что сайт был заблокирован MaxMind, поэтому я попробовал и успешно загрузил этот URL с помощью wget изнутри контейнера на соответствующем сервере.

Мне кажется, что FileHelper.download на самом деле не очень-то и Helper, поскольку он тихо возвращает nil вместо файла. Размер файла всего 44 МБ, так что дело не в этом. Когда я проверяю полные заголовки с помощью wget, я не вижу перенаправления.

Есть какие-нибудь идеи, в чём может быть дело?

Есть ли причина не перехватывать эту ошибку и позволять сборке завершаться с недействительным ключом? Может быть, просто вывести предупреждение?

1 лайк

Работает ли это лучше с follow_redirect: true?

Согласно недавнему изменению, MaxMind изменила URL-адрес для загрузки, но вы можете оставить исходный, если разрешите перенаправление.

2 лайка

Интересно, не было ли недопонимания, и на самом деле это начнется не 1 мая. :thinking:

2 лайка

О боже, да. Не понимаю, почему я не просто изменил это и подумал, что знал, что перенаправление не происходит.

4 лайка

Круто, объединили. Дайте знать, как всё пойдёт!

3 лайка

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

1 лайк

Не могли бы вы проверить, используете ли вы последнюю версию Discourse? У Джейя всё работает; я не вижу причин, по которым у вас это не должно работать, особенно если вы следуете рекомендациям MaxMind. :thinking:

1 лайк

Не уверен, как это могло не произойти при пересборке приложения.

Вы правы. Хотя никогда не знаешь заранее. :smile: Какая версия хеша отображается? Мы можем хотя бы быстро проверить.

Я перечитал объявление MaxMind, но кроме изменения URL или разрешения перенаправлений ничего не вижу. :thinking:

1 лайк

Вы используете tests-passed или latest-release?

Мы находимся в tests-passed, по крайней мере, насколько мне известно.

Какой URL или как получить коммит при просмотре исходного кода.

Конец логов из сбойной сборки:

Загрузка MaxMindDB...
Сжатие JavaScript и генерация карт исходного кода
I, [2024-03-26T13:27:38.305597 #1] INFO -- : Завершение асинхронных процессов
I, [2024-03-26T13:27:38.307312 #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: 42
I, [2024-03-26T13:27:38.307891 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 111
111:signal-handler (1711459658) Получен SIGTERM, планирование завершения работы...
2024-03-26 13:27:38.307 UTC [42] LOG:  получен запрос быстрого завершения работы
2024-03-26 13:27:38.314 UTC [42] LOG:  отмена всех активных транзакций
2024-03-26 13:27:38.321 UTC [42] LOG:  фоновый рабочий "logical replication launcher" (PID 51) завершился с кодом выхода 1
2024-03-26 13:27:38.322 UTC [46] LOG:  завершение работы
111:M 26 Mar 2024 13:27:38.353 # Пользователь запросил завершение работы...
111:M 26 Mar 2024 13:27:38.353 * Сохранение финального снимка RDB перед выходом.
2024-03-26 13:27:38.415 UTC [42] LOG:  система баз данных завершена
111:M 26 Mar 2024 13:27:39.896 * БД сохранена на диск
111:M 26 Mar 2024 13:27:39.896 # Redis теперь готов к выходу, до свидания...
ОШИБКА
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' завершилась с ошибкой с кодом возврата #<Process::Status: pid 3889 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
Выполнение не удалось с параметрами {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
Загрузка не удалась с кодом выхода 1
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и поищите сообщения об ошибках, их может быть больше одной.
./discourse-doctor может помочь диагностировать проблему.
fe4eec7726fdbe08aaa2691e806bb17423a8f4eaedb8414397e3097d725e04c7

Коммит: https://github.com/discourse/discourse/commits/f350cea5d2

В качестве дополнительного замечания: я не ссылался на сайт, на котором это произошло, потому что один из сотрудников тестировал ошибку ядра в отдельном контейнере на том же сервере и по ошибке обрушил весь сервер, поэтому ссылка на сайт ничего бы не изменила.

1 лайк

Это всё ещё происходит, @Firepup650?

Я уже давно собирался пересобрать, так что запущу процесс и посмотрим.

1 лайк

Могу подтвердить, что проблема больше не возникает. Наш форум теперь собирается без проблем.

4 лайка

Эта тема была автоматически закрыта через 26 часов. Новые ответы больше не принимаются.