在Python中,如何testing我是否在Google App Engine SDK中?
在开发的同时,我想要处理一些与我最终上传到Google服务器时不同的事情。
是否有一个快速testing,我可以做,以确定我是否在SDK或生活?
请参阅: https : //cloud.google.com/appengine/docs/python/how-requests-are-handled#Python_The_environment
以下环境variables是CGI标准的一部分,在App Engine中有特殊的行为:
SERVER_SOFTWARE
:在开发Web服务器中 ,此值为“
Development/XY
”,其中“XY
”是运行时的版本。在App Engine上运行时 ,此值为“
Google App Engine/XYZ
”。
基于同样的技巧,我在我的代码中使用这个函数:
def isLocal(): return os.environ["SERVER_NAME"] in ("localhost", "www.lexample.com")
我已经定制了我的/etc/hosts
文件,以便能够通过在我的域名前加一个“l”来访问本地版本,这样从本地传递到生产是非常容易的。
例:
- 生产url是
www.example.com
- 发展url是
www.lexample.com
我只是检查httplib(这是一个appengine获取包装)
def _is_gae(): import httplib return 'appengine' in str(httplib.HTTP)
更一般的解决scheme
一个更通用的解决scheme,并不意味着在谷歌服务器,将检测代码是否在本地机器上运行。
我正在使用下面的代码,无论服务器:
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”中。
编辑:
据Jeff O'Neill介绍,在macOS中,高等级的Sierra socket.gethostname()
将返回一个以“.lan”结尾的string,
- 用Python读App Engine上的文件?
- 如何在Google App Engine中导入模块?
- AppEngine bulkloader,高复制存储和python27运行时
- Google App Engine:是否可以执行GQL LIKE查询?
- Angular Js和google api client.js(gapi)
- UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xe0:序号不在范围内(128)
- 谷歌Go的资源使用与Appengine上的Python和Java
- Google App Engine的优点和缺点
- 使用标准库可以在Go中嵌套模板吗? (Google App Engine)