Heroku调试标志未停止django调试



我目前在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有任何问题,请尝试修复它,而不是禁用它

我知道这有点长,但希望它会有用。

最新更新