簡體   English   中英

Django - 在生產中提供媒體/上傳的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM