【问题标题】:Python App Engine debug/dev modePython App Engine 调试/开发模式
【发布时间】:2014-10-06 10:23:56
【问题描述】:

我正在开发一个 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 服务。一种方式 它这样做是在APPLICATION_ID 前面添加一个字符串(dev~) 环境变量,类似于前面的字符串 使用 High Replication Datastore 的应用程序的生产。你 可以使用 --default_partition 标志修改此行为,选择一个 "" 的值以匹配生产中的主从选项。谷歌 建议始终使用 get_application_id 获取应用程序 ID, 如上所述。

    不确定这是否是环境变量的可接受使用。无论哪种方式,它都可能同样 hacky,并且遇到仅使用本地运行实例的相同问题。

  3. 使用自定义 app-id 进行开发(本地和部署),在 dev_appserver.py 中使用 -A 标志,并在代码中使用 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。但这似乎也有点脏,容易出现错误/同步问题。

我是否缺少其他方法?有什么我没有承认的考虑吗?还有其他建议吗?

【问题讨论】:

  • 你可以在命令行中指定使用dev_appserver.py时要使用的app.yaml文件。例如,我在 development.yaml 中有本地 SQL 设置,但部署时它会自动切换到 app.yaml
  • 是的,这是 #4 的一部分。
  • 为什么选项 1“似乎”不可靠。以及如何排除使用调试模式。调试模式的控制肯定会独立于它在哪里运行开发或生产?
  • 为什么不在这里只使用答案:stackoverflow.com/questions/1916579/…
  • @TimHoffman:我想我只是不知道应用程序是如何在 prod 中运行的,方法 #1 根据运行位置定义了开发模式。不过,我同意它应该是独立的。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2013-09-01
    • 2012-01-13
    • 2012-05-28
    相关资源
    最近更新 更多