gpt4 book ai didi

Python App Engine 调试/开发模式

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:57 25 4
gpt4 key购买 nike

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

据我所知,App Engine 自然没有任何全局开发模式或 Debug模式的概念,所以我想知道如何最好地实现这种模式。到目前为止我能想到的选项:

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

  2. 使用os.environ.get('APPLICATION_ID') 获取应用程序ID,根据this page由开发服务器自动添加 dev~ 前缀。令人担忧的是,此信息的真正来源是在警告框中:

    Do not get the App ID from the environment variable. The development server simulates the production App Engine service. One way in which it does this is to prepend a string (dev~) to the APPLICATION_ID environment variable, which is similar to the string prepended in production for applications using the High Replication Datastore. You can modify this behavior with the --default_partition flag, choosing a value of "" to match the master-slave option in production. Google recommends always getting the application ID using get_application_id, as described above.

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

  3. 使用自定义应用程序 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。但这似乎也有点脏,而且容易出现错误/同步问题。

我是否遗漏了任何其他方法?有什么我没有承认的考虑吗?还有其他建议吗?

最佳答案

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

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

与调试标志结合使用应该可以解决问题。

关于Python App Engine 调试/开发模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25279731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com