2009-12-16 47 views

回答

56

参见:https://cloud.google.com/appengine/docs/python/how-requests-are-handled#Python_The_environment

以下环境变量是CGI标准的一部分,在App Engine中的特殊行为: SERVER_SOFTWARE

开发网络服务器,该值为“ Development/X.Y“其中”X.Y“是运行时的版本。

当在App Engine上运行,这个值是 “Google App Engine/X.Y.Z”。

+2

感谢 这样的事情现在工作对我来说: 进口OS 高清发展(): 如果os.environ [ 'SERVER_SOFTWARE']。找到(“发展”)== 0: 返回True 其他: 返回False – user132262 2009-12-16 18:34:49

+0

它吃了我的格式的评论,但你知道我的意思。干杯 – user132262 2009-12-16 18:35:39

+18

简单:os.environ [ 'SERVER_SOFTWARE'] startswith( '发展') – 2009-12-21 01:35:37

6

基于同样的伎俩,我在我的代码中使用此功能:

def isLocal(): 
    return os.environ["SERVER_NAME"] in ("localhost", "www.lexample.com") 

我为了能够在前面加上“L”来访问本地版本已经定制了自己的/etc/hosts文件我的域名,这种方式很容易从本地传递到生产。

例子:

  • 生产网址是www.example.com
  • 发展网址为www.lexample.com
+0

我更喜欢本地的'w3'子域名。 'w3.example.com'和'www.example.com' – guneysus 2014-12-24 12:18:47

3

我只是检查httplib的(这大约是AppEngine上的包装取出)

def _is_gae(): 
    import httplib 
    return 'appengine' in str(httplib.HTTP) 
+0

这似乎不适用于'testbed'本地单元测试。 – 2013-03-27 17:32:20

+0

我想指出,当App Engine内部时,'appengine'不再是'str(httplib.HTTP)'返回的字符串。实际的字符串是'gae_override.httplib.HTTP'。将测试更新到str(httplib.HTTP)中的'return'gae_override' – 2016-08-25 15:43:26

2

更通用的解决方案
一个更通用的解决方案并不意味着位于Google服务器上,它会检测代码是否在本地计算机上运行。 我使用下面的代码而不管托管服务器:

import socket 

if socket.gethostname() == "your local computer name": 
    DEBUG = True 
    ALLOWED_HOSTS = ["127.0.0.1", "localhost", ] 
    ... 
else: 
    DEBUG = False 
    ALLOWED_HOSTS = [".your_site.com",] 
    ... 

如果使用Mac系统,你可以写一个更通用的代码:

if socket.gethostname().endswith(".local"): # True in your local computer 
    ... 

Django开发必须把这个示例代码的文件settings.py在该项目。

编辑:
根据杰夫奥尼尔在macOS高塞拉利亚socket.gethostname()返回一个字符串以“.lan”结尾。

+0

对于最新的Mac OS X,正确的后缀现在似乎是“.lan”。 – 2017-11-14 14:24:05

+0

有趣的是,我只是在上周搬到Sierra,'socket.gethostname()'返回一个以“.local”结尾的字符串。 您正在运行High Sierra还是服务器版本的macOS? – ePi272314 2017-11-15 01:34:55

+0

我刚刚升级到高塞拉利昂,所以必须是。 – 2017-11-15 02:44:46

相关问题