关于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改成我们自己的。问题解决。

posted @ 2020-03-21 16:39  李大鹅  阅读(500)  评论(0编辑  收藏  举报