关于Django项目集成Xadmin后,出现服务异常解决方案
Django项目集成Xadmin后,偶尔出现页面不能访问,重启服务也不行,如果是Nginx部署直接报504等错误。
解决方案:
在项目中的静态文件中找到:bootstrap-clockpicker.js,具体路径
static/xadmin/vendor/bootstrap-clockpicker/bootstrap-clockpicker.js
找到 var svgNS = 'http://www.w3.org/2000/svg',将http改为https或者将此url用空字符代替,方可解决。
原因是xadmin加载静态文件时候会请求这个路径,现在这个连接使用https协议,而xadmin访问http,http跳转https时发生网络阻塞,所以导致我们的页面加载很慢,或者加载不出来的情况。
补充:
经过上面的修改后,结果发现问题仍然存在,由于项目是用uwsgi启动的,然后查看uwsgi
日志,结果发现下面的一段报错信息。
HTTPSConnectionPool(host='bootswatch.com', port=443): Max retries exceeded with url: /api/3.json (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f7d0c153ef0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
原来xadmin启动的时候,会去访问bootswatch.com
这个路径,而且看端口是443,而且后面的url是/api/3.json
,那么我们可以大胆猜测完整路径为https://bootswatch.com/api/3.json
,我们访问,果然是一堆js字串。
我们可以将这堆字串复制,放在项目的静态文件中,让其调用的时候直接访问我们的静态文件。
最后一步也就是最关进一步了,就是替换路径。
经过一番搜索,最终发现是这个文件调用了外链接口,extra_apps/xadmin/plugins/themes.py
。
编辑这个文件,在79行将需要外网访问的url改成我们自己的。问题解决。