2013-03-06 51 views
4

我有一個在Google AppEngine上運行的web應用程序。Google AppEngine上的不同環境配置

我有一個單獨的PRODUCTION環境,一個STAGE環境和多個開發& QA環境。有許多配置參數在PRODUCTION和其他環境中應該有所不同 - 例如我們整合的服務的API密鑰(例如GoogleAnalytics)。其中一些參數是在代碼中定義的,其他的則在web.xml中定義(例如,在Filters的init-param標籤內),還有其他一些參數。

我知道有幾個方法可以這樣做:

  1. 保存在數據存儲的所有參數(以及可能的每個運行實例/ Memcached的緩存它們)

  2. 部署應用程序在web.xml中使用不同的系統屬性/環境變量

  3. 其他選項...?

無論如何,我很樂意聽到您解決此問題的最佳做法。

回答

2

我最喜歡的方法是將它們全部存儲在數據存儲中,並且只有一個主記錄包含所有不同的屬性並充分利用memcache。通過這樣做,您不需要具有不同的配置文件或使用不同的配置設置來污染代碼。相反,您可以從必須創建的管理表單部署和更改此值,以更新此主記錄。

此外,如果您要存儲令牌和密鑰,那麼您意識到這樣的事實:將它們放在web.xml或代碼中的任何其他位置絕對不是一個好主意,而是讓它在每個應用程序上更安全,就像數據存儲一樣。

一旦你有,那麼你可以有一個全局的功能,將通過名稱檢索屬性,如果你想在你的應用程序的任何地方獲得谷歌Analytics(分析)ID,你應該有這樣的使用方法:

getProperty('googleAnalyticsID') 

其中這一全球getProperty()功能將嘗試找到這些步驟這個值:

  • 檢查,如果它在內存緩存中存在,並返回
  • 如果沒有在內存緩存,更新MEMC從主實體從數據存儲痠痛,返回
  • 如果沒有在數據存儲上創建一個默認值的實體,更新內存緩存並返回

當然也有關於如何從該模型,但這個想法數據不同的方法是一樣的:存儲在一條記錄中並使用memcache。

0

您必須爲您的生產/ staging/qa envs有單獨的app id。這必須嚴格保存到你的web.xml中(或者你有一個更新你的web.xml的腳本)

之後,你可以在你的設置基於appid編碼。我假設有公司的Java相當於這樣的: https://developers.google.com/appengine/docs/python/appidentity/functions#get_application_id

你可以把它在數據存儲,如果他們是動態改變的設置,但如果他們是靜態的環境,它沒有任何意義,以保持從取數據存儲。