为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?
Posted
技术标签:
【中文标题】为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?【英文标题】:Why does Django generate HTTP 500 errors for static media when Debug is set to False?为什么当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误? 【发布时间】:2010-09-12 10:05:24 【问题描述】:我正准备部署我的 Django 应用程序,我注意到当我将“DEBUG”设置更改为 False 时,对静态文件(即 javascript、CSS 等)的所有引用都会导致 HTTP 500
错误。
知道是什么导致了这个问题(以及如何解决它)吗?
【问题讨论】:
【参考方案1】:我强烈建议让您的 Web 服务器处理静态请求,而无需使用 Django。在我的urls.py
中,我只在调试设置为 True 时添加静态请求处理程序。
从技术上讲,提供静态服务的 Django 可以正常工作。一定要阅读简短的文档页面,http://docs.djangoproject.com/en/dev/howto/static-files/。你会想在urls.py
中使用这样的条目
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
'document_root': '/path/to/media')
【讨论】:
哈。如果我查看自己的 urls.py 可能会有所帮助。我已经把所有的设置都连接好了。呃……它的开发周期很长。 :)【参考方案2】:听起来您可能正在尝试使用 Django 开发服务器来提供静态媒体。查看http://docs.djangoproject.com/en/dev/howto/deployment/ 了解一些部署方案/howtos 和http://docs.djangoproject.com/en/dev/howto/static-files/ 了解如何提供静态文件(但请注意关于不在生产中使用这些方法的免责声明)。
一般来说,我会查看您的服务器日志,看看它试图从哪里获取文件。我怀疑 500 错误实际上是 404 错误,但它们变成了 500 错误,因为 Django 无法找到或呈现 404.html 模板。如果不是这种情况,如果您可以发布您遇到的特定 500 错误将会很有帮助。
【讨论】:
【参考方案3】:您还必须到处检查您的网址。当 DEBUG 设置为 False 时,所有没有尾随“/”的 URL 都被视为错误,这与 DEBUG = True 不同,在这种情况下,Django 将在丢失的任何地方附加“/”。因此,简而言之,请确保所有链接都以斜线结尾。
【讨论】:
【参考方案4】:原来我注释掉了SECRET_KEY
变量。不过,我没有办法知道。只是不得不尝试一下。
【讨论】:
以上是关于为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?的主要内容,如果未能解决你的问题,请参考以下文章
为什么只有当Debug = False并且db在Heroku上设置为生产数据库时,django才会因服务器500而失败?
当模板调试设置为 False 时,Django 上的服务器错误(500)?
当 DEBUG = False 时 Django 转义 javascript
当 DEBUG 为 False 时,Django 为所有静态文件(如 CSS 和图像)提供错误 500