Python App Engine调试/开发模式

时间:2014-08-13 06:47:33

标签: python google-app-engine testing development-environment

我正在开发一个App Engine项目(Python),我们希望在调试/开发时(通常是本地)对应用程序的行为进行某些更改。例如,在调试时,我们要禁用我们的速率限制装饰器,打开WSGIApplication中的调试参数,可能会添加一些断言。

据我所知,App Engine自然没有全局开发模式或调试模式的概念,所以我想知道如何最好地实现这样的模式。到目前为止我能够提出的选择:

  1. 使用google.appengine.api.app_identity.get_default_version_hostname()获取主机名并检查它是否以localhost开头。这似乎......不可靠,并且不允许在已部署的应用程序实例中使用调试模式。

  2. 使用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,并且遇到同样的问题,只能使用本地运行的实例。

  3. 使用自定义app-id进行开发(本地和部署),使用-A中的dev_appserver.py标记,并在代码中使用google.appengine.api.app_identity.get_application_id()。我不喜欢这个原因有多种原因(即必须有两个独立的应用程序引擎项目)。

  4. 使用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。但这似乎也很脏,容易出现错误/同步问题。

  5. 我错过了其他方法吗?我没有承认任何考虑因素?还有其他建议吗?

1 个答案:

答案 0 :(得分:3)

关于“检测”localhost开发,我们在应用程序设置/配置文件中使用以下内容。

IS_DEV_APPSERVER = 'development' in os.environ.get('SERVER_SOFTWARE', '').lower()

与调试标志一起使用应该可以解决这个问题。