我目前在heroku中有Django项目,但我试图停止调试模式,但不幸的是它不起作用。
首先,我试图从settings.py
:中阻止它
DEBUG=False
DEBUG = os.environ.get('DEBUG', False)
两者都不起作用。
我还尝试设置env
变量:
heroku config:set DEBUG=False
heroku config:unset DEBUG
两者也于事无补。
我试图在settings.py中为调试分配错误的值以进行测试,这导致部署崩溃。
希望有人能帮上忙。
最简单的方法就是如下设置heroku值:
heroku config:set DEBUG_VALUE="False"
然后在您的设置中。通过测试您存储的字符串值,如下所示:
DEBUG = (os.environ.get('DEBUG_VALUE') == 'True')
由于DEBUG_VALUE
设置为"False",因此DEBUG
在生产中将为False。
最终问题解决了,实际上有两个问题:
-第一个:我使用
来自django.contrib.staticfiles.storage导入staticfiles_storage
在我的模型文件中获取静态文件url
staticfiles_store.url('img/default.jpg'(
这在heroku中的collectstatic过程中导致了一个问题,有些原因是djanogo不知道在哪里可以找到它的清单文件,所以我删除了它,并在html模板中处理它。
-第二个问题:根据heroku django资产的建议,我禁用了collectstatic,但这造成了很大的混乱,我后来意识到,当debug为true时,静态文件将从STATICFILES_DIRS
提供,而如果debug为False,静态文件则从STATIC_ROOT
提供,所以当我关闭debug时,它试图从STATIC_ROOT
获取文件。下面是手动收集静态文件时的技巧,文件将收集到名为staticfiles的文件夹中(您的设置将被heroku设置覆盖(,而如果enable collectstatic heroku会将静态文件收集到/tmp/dir,然后在这两种情况下,您的应用程序都会尝试从/tmp/获取不存在的文件,以防您手动收集静态文件。
结论:
- 最好不要在Django代码中使用静态文件url
- 如果在将项目部署到heroku期间,您对collectstaic有任何问题,请尝试修复它,而不是禁用它
我知道这有点长,但希望它会有用。