Django - 区分开发服务器(manage.py runserver)和常规服务器(例如Apache)

时间:2012-06-09 16:40:51

标签: django apache wsgi django-manage.py django-dev-server

我需要一种方法来区分Django中的开发服务器(例如,由./manage.py runserver 0.0.0.0:8000运行)与在Apache上运行的服务器。在Apache的情况下,我使用WSGI守护进程模式,但我想找到一些更可靠的解决方案来检测Django开发服务器上的执行。

我目前使用的类似于:

wsgi_wrapper = request.META.get('wsgi.file_wrapper')
wsgi_wrapper_path = wsgi_wrapper.__module__ if wsgi_wrapper else None

似乎给出wsgi_wrapper_path存储:

  • wsgiref.util”字符串在Django的内置开发服务器上运行时,
  • None在守护进程模式下运行Apache / WSGI时

这里的问题是我不确定我是否可以依赖该检查(例如,生产/登台/开发服务器或我的localhost配置是否发生变化)。我无法找到任何有关该文件的文件。

我需要检查主要是因为Django的开发服务器存在一个问题:它将请求的CONTENT_TYPErequest.META['CONTENT_TYPE'])设置为“text/plain”即使HTTP请求本身没有设置内容类型(例如,它是GET请求。)

任何关于Django的开发服务器检测(或解决其上的错误请求内容类型的问题)的想法都将受到赞赏。感谢。

聚苯乙烯。我基本上问这个问题:How can I tell whether my Django application is running on development server or not?对于Django 1.4,试图确定在配置更改时足够可靠的解决方案。

1 个答案:

答案 0 :(得分:2)

原则上 - 当使用Production和Dev服务器时,它们应该有不同的配置 - 最常见的是它们将使用不同的数据库,不同的邮件设置等。 因此,告诉服务器类型的最佳位置是配置。我可以指出两种最常用的方法:

  • 配置文件

然后在settings.py中添加:

server = config.get("SERVER_TYPE", "DEV")

并且只在PRODUCTION

的配置文件中包含SERVER_TYPE
  • 环境

运行Web服务器时将SERVER_TYPE设置为环境变量。即对于Supervisord,运行网络服务器:

environment=SERVER_TYPE=PROD

或Apache:

SetEnv SERVER_TYPE PROD

通过这种方式,您可以确保只要不混合配置文件,无论您如何启动服务器,都将始终获得真实的服务器类型。 至少为什么配置文件用于。