【问题标题】:How do I know if my code is running deployed on GAE or running local?我如何知道我的代码是在 GAE 上运行还是在本地运行?
【发布时间】:2011-06-21 20:21:47
【问题描述】:

我有一些导入和语句需要从 gdata 获取一些加密模块以加载到我的 GAE Python SDK:

from google.appengine.tools.dev_appserver import HardenedModulesHook
HardenedModulesHook._WHITE_LIST_C_MODULES += ['_counter']

但是在 GAE 上部署时,此导入不起作用(也不需要),仅在本地。

如何测试代码是在 GAE 上运行还是在本地运行,以便有条件地执行此导入或其他本地特定的东西?

【问题讨论】:

  • 我很困惑 - 为什么你想要/需要只在 dev_appserver 上执行此操作?在没有这些 C 模块的情况下,你在生产中做什么?
  • gdata.tlslite.util 加密模块在使用时使用一些 M2Crypto 模块,并选择 openssl 作为生成密钥的首选方式。在 GAE 上,openssl 不是一个选项,所以它没有尝试,它使用纯 Python 实现。在我的 SDK 上,它找到了 M2Crypto 并尝试导入它,即使我指定了密钥的 python 实现。可能有更好的方法可以从我的 GAE SDK 中排除 M2Crypto,但这是可行的。我喜欢使用 M2Crypto,这样我可以更轻松地检查我的密钥和签名等是否可移植。

标签: python google-app-engine import


【解决方案1】:

如果导入实际上不起作用,因为它会引发 ImportError,那么您最好的选择是尝试/排除错误。

try:
    from google.appengine.tools.dev_appserver import HardenedModulesHook
    HardenedModulesHook._WHITE_LIST_C_MODULES += ['_counter']
except ImportError:
    HardenedModulesHook = None

您可以只在 except 块中使用 pass,但这样做可以让您检查 HardenedModulesHook 引用并执行一些应用程序逻辑。

【讨论】:

  • 这对我眼前的问题很好。谢谢。
【解决方案2】:

我在我的一些宠物项目中使用它。不记得我从哪里得到的。

import os
if 'SERVER_SOFTWARE' in os.environ and os.environ['SERVER_SOFTWARE'].startswith('Dev'):

【讨论】:

  • 这会派上用场!
【解决方案3】:

您说导入在 GAE 上部署时不起作用,那么为什么不简单地做这样的事情呢?

try:
    from google.appengine.tools.dev_appserver import HardenedModulesHook

HardenedModulesHook._WHITE_LIST_C_MODULES += ['_counter']

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多