如何在生产服务器上非侵入式触发django DEBUG

时间:2009-12-22 00:50:55

标签: django debugging production

我正在寻找一种在django生产服务器上为INTERNAL_IPS请求触发DEBUG的安全方法,而无需更改settings.py文件。主要是让一些设计人员使用工具栏检查实时数据/媒体上的问题,但一旦完成设置就不依赖它们来重置设置。

与此方法类似。 hovever这只适合部署。

http://nicksergeant.com/blog/django/automatically-setting-debug-your-django-app-based-server-hostname

过去基于php的系统我有mydomain.com和一个演示mydomaincom.myprodserver.com,其中prodserver域可以自动运行基于$ _SERVER ['HOST_NAME']的调试代码,但是django缺少简单的超全局。例如,在博客示例中,hostname是/ etc / hostname而不是vhost。

任何想法都赞赏。

编辑:

我有一个解决方法(但理想情况下我更喜欢更便携的解决方案)是将/ path /到/ django_in_debug /添加到mydomaincom.myprodserver.com vhost条目的sys.path中。然后在settings.py文件中

try:
    from django_in_debug.settings import *
except:
    DEBUG = False

1 个答案:

答案 0 :(得分:9)

你要做的事情似乎比它看起来要复杂得多。您希望显示在请求级别中发生的某些INTERNAL_IPS的调试信息。但是,您所说的是位于网站级的settings.py。

要实现这一点,您必须根据每个请求重新评估settings.py,正如您所知,这可能是一个非常糟糕的方向。根据Django自己的文档,在加载后修改网站的设置是一个禁忌(为了公平的人们逃避这一点,但是Django的官方立场是没有价值的。)

以下是您的想法:

您有2个WSGI文件。第一个WSGI文件指向您的主settings.py,apache将流量从www.yourdomain.com引导到它。第二个WSGI文件指向debug_settings.py,apache将流量从debug.yourdomain.com重定向到它。 debug_settinsg.py看起来像这样:

from settings import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG

从这里开始编写一个简单的中间件组件来捕获传入的请求。将请求IP与settings.INTERNAL_IPS进行比较,如果找到匹配项,请求将重定向到debug.yourdomain.com。

这允许您保留1个站点副本,但可以根据请求级别值更改站点级别设置。