在Python中,如何测试我是否在使用Google App Engine SDK?

use*_*262 39 python google-app-engine

在开发过程中,我希望处理的内容与我最终上传到Google服务器时的处理方式略有不同.

我是否可以通过快速测试来了解我是在SDK中还是在线?

mik*_*iku 59

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

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

开发Web服务器中,此值为" Development/X.Y",其中" X.Y"是运行时的版本.

在App Engine上运行时,此值为" Google App Engine/X.Y.Z".

  • 更简单:os.environ ['SERVER_SOFTWARE'].startswith('Development') (20认同)
  • 感谢这样的事现在对我有用:import os def development():if os.environ ['SERVER_SOFTWARE'].find('Development')== 0:return True else:return False (2认同)
  • 此外,在AppScale(开源GAE)中,此值设置为"AppScaleServer/XY". (2认同)
  • 对于Python 3运行时,这是不同的:https://cloud.google.com/appengine/docs/standard/python3/runtime。我想使用NODE_ENV和值“ production”,但是它不存在,所以我使用了GAE_DEPLOYMENT_ID ...该文档必须不正确,否则我不知道何时设置了NODE_ENV (2认同)

tuo*_*tik 8

在 中app.yaml,您可以添加IS_APP_ENGINE环境变量

env_variables:
  IS_APP_ENGINE: 1
Run Code Online (Sandbox Code Playgroud)

并在你的Python代码中检查它是否已经设置

if os.environ.get("IS_APP_ENGINE"):
    print("The app is being run in App Engine")
else:
    print("The app is being run locally")
Run Code Online (Sandbox Code Playgroud)


Emi*_*ien 6

基于相同的技巧,我在我的代码中使用此函数:

def isLocal():
    return os.environ["SERVER_NAME"] in ("localhost", "www.lexample.com")
Run Code Online (Sandbox Code Playgroud)

我已经自定义了我的/etc/hosts文件,以便能够通过在我的域名前添加"l"来访问本地版本,这样就很容易从本地传递到生产.

例:

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