Prestashop 电子商务网站正在使用 MaxMind 的 GeoLite2-City 数据库进行国家/地区屏蔽。geoipupdate
它使用此cron
命令来使该数据库保持最新状态:
/usr/bin/curl -L --silent 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz' | /bin/zcat > '/home/u3p3/domains/xyz.tld/public_html/app/Resources/geoip/GeoLite2-City.mmdb'
自 2020 年 1 月起,geolite 数据库不再向公众开放,并需要帐户和许可证密钥。在未更新 geolite mmdb 文件后不到 21 天内,Prestashop 便会停止运行并出现 500 错误:
InvalidDatabaseException:打开数据库文件时出错。
如何使用来自新下载位置的新许可证文件再次运行 cron 作业?
答案1
Prestashop 1.7.x
这是 cron 作业,它仅将GeoLite2-City.mmdb
文件从压缩的 tar 文件提取到 Prestashop 内置 geoip 模块所需的位置:
/usr/bin/curl -L --silent 'https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz' | /bin/tar -C '/home/u3p3/domains/xyz.tld/public_html/app/Resources/geoip' -xvz --keep-newer-files --strip-components=1 --wildcards '*GeoLite2-City.mmdb'
--keep-newer-files
“保留较新的文件”标志用于减少写入 I/O。文件的现有相同版本不会被覆盖。当上游版本没有更新时,tar 输出将变成类似以下内容:
/bin/tar: Current `GeoLite2-City.mmdb' is newer or same age