[英]Django is not serving static and media files in development but it is serving in production
[英]Django - Serving MEDIA/uploaded files in production
我目前在我的項目 urls.py 中有這個,最后一行是重要的。
urlpatterns = patterns('',
url(r'^', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
有人告訴我並且我已經讀到這不適合生產環境。 為什么會這樣?
Django 被構建為“應用程序服務器”,而不是“Web 服務器”。
換句話說,從 Django 提供靜態文件的性能會比使用 Apache 或 Nginx 更差。 這些靜態內容服務器 (1) 用 C 編寫,(2) 針對性能進行了優化。
相比之下,Django (1) 用純 Python 編寫,(2) 為開發應用程序進行了優化。
請參閱文檔。
那可能完全沒問題。 我已經使用 Django 在生產中提供靜態內容,當時我知道負載不會很高並且我沒有提供大文件。 這取決於“生產”實際上是什么樣的環境。
僅供參考, 常見的生產設置是使用 Nignx、Django、Gunicorn 和 Supervisor。 Nginx 為磁盤中的靜態內容提供服務,並將其余內容反向代理到 Gunicorn,后者運行多個 Django 實例。 主管監控 Gunicorn 並確保它保持運行。 這完全取決於您需要什么級別的 Web 應用程序。
不建議從 django 服務器本身提供靜態文件。 推薦的方法是在單獨的服務器中為它們提供服務。 檢查靜態文件部署,在那里你會找到你需要的一切。
擴展@Paul Draper 的回答:
使用 Nginx 時,請務必列出以下配置:
location /media/ {
root path/to/your/media;
}
我使用了django-storages 包的google 部分的教程,它解決了從 Google Storage 提供文件(靜態或媒體或兩者)的問題,從而避免了在 Nginx 等上進行額外配置的麻煩
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.