Django - 在生产中提供MEDIA /上传文件

时间:2014-04-03 21:57:17

标签: python django apache web

我目前在我的项目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)

我被告知并且我已经知道这不适合生产环境。为什么会这样?

4 个答案:

答案 0 :(得分:6)

Django是一个"应用服务器"而不是" web服务器"。

换句话说,从Django提供静态文件的性能将比使用Apache或Nginx更差。这些静态内容服务器(1)用C语言编写,(2)针对性能进行了优化。

相比之下,Django是(1)用纯Python编写的,(2)是为开发应用程序而优化的。

请参阅documentation


这可能完全没问题。我已经使用Django来提供生产中的静态内容,当我知道负载不会很高并且我没有提供大文件时。这取决于什么样的环境"生产"实际上是。


仅供参考,common生产设置将使用Nignx,Django,Gunicorn和Supervisor。 Nginx从磁盘上提供静态内容,并将其余内容反向代理到Gunicorn,后者运行多个Django实例。主管监控Gunicorn并确保它继续运行。这完全取决于您需要的Web应用程序级别。

答案 1 :(得分:1)

建议不要从django服务器本身提供静态文件。建议的方法是在单独的服务器中提供它们。检查static files deployment,您将找到所需的一切。

答案 2 :(得分:0)

扩展@Paul Draper的答案:

使用Nginx时,请确保列出以下配置:

location /media/ {
        root path/to/your/media;
}

答案 3 :(得分:0)

我在google section of the django-storages package中使用了本教程,它解决了从Google Storage提供文件(静态文件或媒体文件,或两者兼有)的问题,从而避免了在Nginx等上进行额外配置的麻烦