2016-04-24 105 views
4

剛剛切換我的網站以通過SSL提供服務時,我無法讓Django選擇正確的生成的URL:s用於靜態文件。Django似乎從靜態文件URL中去掉https - 爲什麼?

STATIC_URL設置在https://example.com/assets/static/

形式當我在一個模板做{% static 'css/file.css' %},路徑出來爲http://example.com/assets/static/css/file.css - 這是和以前一樣。

事情我已經試圖解決這個問題:

  • 確保我在最新提交,用正確的設置。
  • python manage.py collectstatic
  • 而重新啓動的nginx/gunicorn/memcached的
  • 刪除*.pyc -files,以防萬一

同樣的事情發生與MEDIA_URL。但是,如果我放入交互式外殼並導入模型,然後打印上傳的圖像文件的.url屬性(例如),則會顯示正確的https:// -prefix。

運行Django 1.9.5,對於靜態文件使用CachedStaticFileLoader,Gunicorn(v 19.4)和模板緩存。緩存引擎是memcached。

關於發生了什麼事情的任何想法?

編輯STATIC_URLMEDIA_URL的設置更改根本沒有被拾取,看起來,儘管其他代碼更改似乎工作。我不知道發生了什麼事...

+0

你有'os.environ ['HTTPS'] =「on」'你試過使用相對的'STATIC_URL'嗎?同樣,從http重定向到https也是一件好事,不管是在nginx中,它應該是靜態的 – aershov

+0

我使用'SECURE_PROXY_SSL_HEADER'設置將HTTPS狀態從Nginx傳遞給Django,它似乎正在工作(我可以在模板中輸出'request.is_secure'的結果,並返回'True')。我嘗試在環境中添加'HTTPS = on',但它對我的問題沒有影響。 我懷疑還有其他事情正在進行,因爲'MEDIA_URL'和'STATIC_URL'中的值似乎根本不會被拾取,相對與否。 :-( – Emil

回答

2

答案是根本沒有設置變化 - Gunicorn進程掛起來試圖以某種方式重啓(不管我告訴它多少次),保留舊的過程正在進行。模板等的變化被拿起(因爲那些不是python文件),但STATIC_URL從未更新。

愚蠢簡單的答案:重新啓動所有的東西。