Сборка не удалась из-за этого. Я удалил переменную окружения 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, я не вижу перенаправления.
Есть какие-нибудь идеи, в чём может быть дело?
Есть ли причина не перехватывать эту ошибку и позволять сборке завершаться с недействительным ключом? Может быть, просто вывести предупреждение?