【问题标题】:Why not serving static files with Django in a production environment?为什么不在生产环境中使用 Django 提供静态文件?
【发布时间】:2016-08-09 21:17:59
【问题描述】:

我遇到了settings.py 的以下示例:

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

并被告知:

static() 辅助函数适用于开发,但不适用于 生产使用。永远不要使用 Django 提供静态文件 生产环境。

谁能解释一下为什么以及如何更好地使用它?

编辑:

我可以在 Apache 中使用 static() 吗?

【问题讨论】:

  • 查看这些提示here
  • @nbryans 提示很有趣,但我一般看不到我的问题的答案。它还只是告诉不要将静态文件与“manage.py runserver”一起使用。我想了解为什么我不应该将它与 Apache 一起使用?
  • 如果你想从你的 WSGI 服务器提供静态文件,WhiteNoise 是一个更好的选择。如果设置允许,WhiteNoise 将使用网络服务器使用sendfile() 系统调用直接从磁盘推送实际文件内容。 static() 帮助程序将文件加载到 python 内存中并通过 WSGI 处理程序发送。应尽可能避免使用这些额外的层,尤其是对于较大的文件。
  • 您最好还是使用专门构建的 Web 服务器的设施而不是 WhiteNoise。所以如果使用 Apache/mod_wsgi 使用 Apache 来处理静态文件而不是 WhiteNoise。如果在 nginx 后面使用 uWSGI 或 Gunicorn,请使用 nginx。您可能仍想使用 WhiteNoise 的一个原因是,如果与 CDN 结合使用来缓存内容。

标签: python django apache static settings


【解决方案1】:

Django 在提供静态文件方面不是非常快速或高效。引用 Django 文档,“这种方法效率极低,可能不安全,因此不适合生产。”最好使用专门为提供静态内容而设计的工具。在 deploying static files 上的 Django 文档中有关于如何设置静态服务器的详细说明。

基本思想是不要让 Django 不必要地参与静态文件的服务。让您的生产服务器(从您的评论中听起来像是 apache)直接提供静态文件。以下是编辑 httpd.conf 文件以使 apache 提供静态文件 https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#serving-files 的说明。 django 中的 static() 函数根本不应该参与。确保使用 django 中的 collectstatic 管理命令将所有静态文件复制到 STATIC_ROOT 以便 apache 可以找到它们。

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 2018-09-25
    • 2015-11-26
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2018-10-11
    • 2012-01-26
    相关资源
    最近更新 更多