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改成我們自己的。問題解決。