我正在开发一个App Engine项目(Python),我们希望在调试/开发时(通常是本地)对应用程序的行为进行某些更改。例如,在调试时,我们要禁用我们的速率限制装饰器,打开WSGIApplication中的调试参数,可能会添加一些断言。
据我所知,App Engine自然没有全局开发模式或调试模式的概念,所以我想知道如何最好地实现这样的模式。到目前为止我能够提出的选择:
使用google.appengine.api.app_identity.get_default_version_hostname()
获取主机名并检查它是否以localhost
开头。这似乎......不可靠,并且不允许在已部署的应用程序实例中使用调试模式。
使用os.environ.get('APPLICATION_ID')
获取应用程序ID,开发服务器会根据this page自动添加dev~
。令人担忧的是,这些信息的来源是一个方框警告:
不要从环境变量中获取App ID。发展 服务器模拟生产App Engine服务。其中一种方式 这样做是为了将一个字符串(
dev~
)添加到APPLICATION_ID
环境变量,类似于前面的字符串 使用High Replication数据存储区生成应用程序。您 可以使用--default_partition标志修改此行为,选择一个 “”的值,以匹配生产中的主从选项。谷歌 建议始终使用get_application_id获取应用程序ID, 如上所述。
不确定这是否是环境变量的可接受用途。无论哪种方式,它可能同样是hacky,并且遇到同样的问题,只能使用本地运行的实例。
使用自定义app-id进行开发(本地和部署),使用-A
中的dev_appserver.py
标记,并在代码中使用google.appengine.api.app_identity.get_application_id()
。我不喜欢这个原因有多种原因(即必须有两个独立的应用程序引擎项目)。
使用dev
应用引擎version进行开发,并在代码中使用os.environ.get('CURRENT_VERSION_ID').split('.')[0]
进行检测。部署时这很容易,但我不确定如何在不修改app.yaml的情况下使dev_appserver.py使用自定义版本。我想我可以sed
app.yaml到/tmp/
中的临时文件,替换版本并解析相对路径(或者只创建一个持久的dev-app.yaml),然后将其传递给dev_appserver。 PY。但这似乎也很脏,容易出现错误/同步问题。
我错过了其他方法吗?我没有承认任何考虑因素?还有其他建议吗?
答案 0 :(得分:3)
关于“检测”localhost开发,我们在应用程序设置/配置文件中使用以下内容。
IS_DEV_APPSERVER = 'development' in os.environ.get('SERVER_SOFTWARE', '').lower()
与调试标志一起使用应该可以解决这个问题。