IIS中的Django DEBUG异常:DEBUG = False仍在调试模式下运行

时间:2018-06-29 16:07:30

标签: python django python-3.x environment-variables

摘要:即使将设置设置为DEBUG = False,我的网站仍以DEBUG模式运行。

仅供参考,我对此进行了研究,并在以下相关问题中找到了一些很好的回答和测试思路(尽管在逻辑上应该有帮助,但没有帮助):django DEBUG=False still runs in debug mode Heroku Django DEBUG Setting not applied


IIS FastCGIHandler环境变量:

名称= DJANGO_DEBUG
值= False

注意:无论Production.py中的设置如何,删除此环境变量都会导致500错误。

settings / production.py:

在我的FastCGIHandler中使用设置为False的env变量在settings / production.py中尝试的不同方案:

  1. DEBUG = os.environ.get('DJANGO_DEBUG', False)

    • 结果:网站在调试模式下运行
  2. DEBUG = bool(os.environ.get('DJANGO_DEBUG', False))

    • 结果:网站在调试模式下运行
  3. DEBUG = False (不带环境变量的硬代码)

    • 结果:网站无法正常工作,返回500页,错误跟踪显示ValueError: Missing staticfiles manifest entry for 'images/favicon/manifest.json',这是一个非常奇怪且令人误解的错误。

已采取的其他措施:

  • 我已经检查了base.py和production.py文件中是否有其他对DEBUG或对DJANGO_SETTINGS变量的引用,它们很清楚。我还搜索了与IIS服务器交互的其他.py文件(wsgi.py,manage.py)。
  • 我什至尝试在base.py文件中设置DEBUG = False并获得相同的结果。
  • 我安装了python-decouple并尝试使用它。
  • 我安装了django-environ并尝试使用它(我在该服务器上运行了另一个django站点,使用django-environ访问可以正常工作的环境变量。)

我从未见过这样的事情。其他环境变量运行良好,因此似乎在此布尔值附近。为什么不对python设置中的DEBUG变量进行硬编码呢?

希望能帮助您找出下一个看点。

1 个答案:

答案 0 :(得分:1)

环境变量始终是字符串。即使非空字符串包含字符串“ False”,也始终为True。

您需要将值与字符串进行比较:

DEBUG = (os.environ.get('DJANGO_DEBUG') == "True")

或者,当您要在非调试模式下运行时,只需从IIS设置中完全删除该变量即可。

另一个错误不是“怪异或误导”,而是静态文件的问题,在非调试模式下使用ManifestStorage后端之前,您需要修复该问题。