4

我有一个在 Google AppEngine 上运行的网络应用程序。

我有一个 PRODUCTION 环境、一个 STAGING 环境和多个开发和 QA 环境。在 PRODUCTION 和其他环境之间有许多配置参数应该不同 - 例如我们集成的服务的 API 密钥(例如 GoogleAnalytics)。其中一些参数在代码中定义,其他在 web.xml 中定义(例如,在过滤器的 init-param 标记内),以及其他情况。

我知道有几种方法可以做到这一点:

  1. 将所有参数保存在数据存储中(并可能将它们缓存在每个运行实例/Memcached 中)

  2. 在 web.xml 中部署具有不同系统属性/环境变量的应用程序

  3. 其他选择...?

无论如何,我很想听听您解决这个问题的最佳实践。

4

2 回答 2

2

我最喜欢的方法是将它们全部存储在数据存储中,其中只有一个具有所有不同属性的主记录,并充分利用内存缓存。通过这样做,您不需要拥有不同的配置文件或使用不同的配置设置污染您的代码。相反,您可以从必须创建的管理表单部署和更改此值,以便更新此主记录。

此外,如果您要存储令牌和密钥,那么您会意识到将它们放在web.xml代码中或其他任何地方绝对不是一个好主意,而是将每个应用程序放在更安全的东西上,比如数据存储。

一旦你有了它,你就可以拥有一个全局函数,它会按名称检索属性,如果你想从应用程序中的任何地方获取 Google Analytics ID,你应该通过以下方式使用它:

getProperty('googleAnalyticsID')

此全局getProperty()函数将尝试通过以下步骤找到此值:

  • 检查它是否存在于 memcache 中并返回
  • 如果不在 memcache 中,则从数据存储中的主实体更新 memcache 并返回
  • 如果不在数据存储区中创建一个具有默认值的实体,则更新 memcache 并返回

当然,关于如何从该模型中检索数据有不同的方法,但想法是相同的:存储在一条记录中并使用内存缓存。

于 2013-03-06T15:51:18.503 回答
0

您的生产/登台/质量保证环境必须有单独的应用程序 ID。这必须硬编码到您的 web.xml 中(或者您有某种脚本可以更新您的 web.xml)

之后,您可以根据 appid 在设置中进行编码。我假设有一个等效于这个的java: https ://developers.google.com/appengine/docs/python/appidentity/functions#get_application_id

如果它们是动态更改的设置,则可以将其放入数据存储中,但如果它们对环境是静态的,则继续从数据存储中获取是没有意义的。

于 2013-03-06T15:53:34.453 回答