0

我需要一种方法来区分 Django 中的开发服务器(例如 by 运行./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 上运行时,

这里的问题是我不确定我是否可以依赖该检查(例如,如果生产/登台/开发服务器或我的本地主机配置发生更改)。我找不到任何有关此的文档。

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

任何关于 Django 的开发服务器检测(或解决请求内容类型不正确的问题)的想法都将不胜感激。谢谢。

附言。我基本上是在问这个问题:如何判断我的 Django 应用程序是否在开发服务器上运行?对于 Django 1.4,尝试确定在配置更改时足够可靠的解决方案。

4

1 回答 1

2

作为一个原则 - 当使用生产服务器和开发服务器时,它们应该有不同的配置 - 最常见的是它们将使用不同的数据库、不同的邮件设置等。所以最好的地方告诉服务器的类型是配置。我可以指出两种最常用的方法:

  • 配置文件

然后在 settings.py 中添加:

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

并且 SERVER_TYPE 仅在 PRODUCTION 的配置文件中

  • 环境

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

environment=SERVER_TYPE=PROD

或者对于 Apache:

SetEnv SERVER_TYPE PROD

这样你就可以确保只要你不混合配置文件,你总是会得到真正的服务器类型,不管你如何启动服务器。至少这就是使用配置文件的原因。

于 2012-06-11T08:08:49.060 回答