mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: add backup directory for mmdb files
This new `DISCOURSE_MAXMIND_BACKUP_PATH` can be used a secondary location
for maxmind db. That way a build machine, for example can cache it on the
host and reuse between builds.
Also per 5bfeef77 added proper error raising for download fails from
dedicated rake task
This also moves "refresh_maxmind_db_during_precompile_days" to a global
setting, it did not make sense in a site setting
This commit is contained in:
@@ -158,15 +158,75 @@ def concurrent?
|
||||
end
|
||||
end
|
||||
|
||||
def get_mmdb_time(root_path)
|
||||
mmdb_time = nil
|
||||
|
||||
%w{
|
||||
GeoLite2-City
|
||||
GeoLite2-ASN
|
||||
}.map do |name|
|
||||
|
||||
path = File.join(root_path, "#{name}.mmdb")
|
||||
|
||||
if File.exist?(path)
|
||||
mmdb_time = File.mtime(path)
|
||||
else
|
||||
mmdb_time = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
mmdb_time
|
||||
end
|
||||
|
||||
def copy_maxmind(from_path, to_path)
|
||||
puts "Copying MaxMindDB from #{from_path} to #{to_path}"
|
||||
|
||||
%w{
|
||||
GeoLite2-City
|
||||
GeoLite2-ASN
|
||||
}.each do |name|
|
||||
from = File.join(from_path, "#{name}.mmdb")
|
||||
to = File.join(to_path, "#{name}.mmdb")
|
||||
FileUtils.cp(from, to, preserve: true)
|
||||
end
|
||||
end
|
||||
|
||||
task 'assets:precompile' => 'assets:precompile:before' do
|
||||
if refresh_days = SiteSetting.refresh_maxmind_db_during_precompile_days
|
||||
mmdb_path = DiscourseIpInfo.mmdb_path('GeoLite2-City')
|
||||
mmdb_time = File.exist?(mmdb_path) && File.mtime(mmdb_path)
|
||||
|
||||
refresh_days = GlobalSetting.refresh_maxmind_db_during_precompile_days
|
||||
|
||||
if refresh_days.to_i > 0
|
||||
|
||||
mmdb_time = get_mmdb_time(DiscourseIpInfo.path)
|
||||
|
||||
backup_mmdb_time =
|
||||
if GlobalSetting.maxmind_backup_path.present?
|
||||
get_mmdb_time(GlobalSetting.maxmind_backup_path)
|
||||
end
|
||||
|
||||
mmdb_time ||= backup_mmdb_time
|
||||
if backup_mmdb_time && backup_mmdb_time >= mmdb_time
|
||||
copy_maxmind(GlobalSetting.maxmind_backup_path, DiscourseIpInfo.path)
|
||||
end
|
||||
|
||||
if !mmdb_time || mmdb_time < refresh_days.days.ago
|
||||
puts "Downloading MaxMindDB..."
|
||||
mmdb_thread = Thread.new do
|
||||
DiscourseIpInfo.mmdb_download('GeoLite2-City')
|
||||
DiscourseIpInfo.mmdb_download('GeoLite2-ASN')
|
||||
begin
|
||||
DiscourseIpInfo.mmdb_download('GeoLite2-City')
|
||||
DiscourseIpInfo.mmdb_download('GeoLite2-ASN')
|
||||
|
||||
if GlobalSetting.maxmind_backup_path.present?
|
||||
copy_maxmind(DiscourseIpInfo.path, GlobalSetting.maxmind_backup_path)
|
||||
end
|
||||
|
||||
rescue OpenURI::HTTPError => e
|
||||
STDERR.puts("*" * 100)
|
||||
STDERR.puts("MaxMindDB (#{name}) could not be downloaded: #{e}")
|
||||
STDERR.puts("*" * 100)
|
||||
Rails.logger.warn("MaxMindDB (#{name}) could not be downloaded: #{e}")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user