4

Google AppEngine で Web アプリケーションを実行しています。

単一の PRODUCTION 環境、STAGING 環境、複数の開発および QA 環境があります。PRODUCTION とその他の環境では、統合するサービスの API キー (GoogleAnalytics など) など、多くの構成パラメーターが異なる必要があります。これらのパラメーターの一部はコードで定義され、他は web.xml (たとえば、フィルターの init-param タグ内) で定義され、その他の場合も同様です。

そうするためのいくつかのアプローチがあることを私は知っています:

  1. すべてのパラメーターをデータストアに保存します (実行中の各インスタンス / Memcached にパラメーターをキャッシュすることもできます)。

  2. web.xml で異なるシステム プロパティ / 環境変数を使用してアプリケーションをデプロイする

  3. その他のオプション...?

とにかく、この問題を解決するためのベスト プラクティスを聞きたいです。

4

2 に答える 2

2

私のお気に入りのアプローチは、それらすべてをデータストアに保存し、さまざまなプロパティをすべて備えたマスターレコードを1つだけ保持し、memcacheを有効に活用することです。そうすることで、異なる構成ファイルを用意したり、異なる構成設定でコードを汚染したりする必要がなくなります。代わりに、このマスターレコードを更新するために作成する必要がある管理フォームから、この値を展開および変更できます。

また、トークンと秘密鍵を保存している場合は、それらをコード内またはコード内の他の場所に配置するのは間違いなくお勧めできませんがweb.xml、データストアなどのより安全な場所にアプリケーションごとに配置することはお勧めできません。

それができたら、名前でプロパティを取得する1つのグローバル関数を作成できます。アプリのどこからでもGoogleアナリティクスIDを取得する場合は、次のようにして使用する必要があります。

getProperty('googleAnalyticsID')

このグローバルgetProperty()関数は、次の手順でこの値を見つけようとします。

  • memcacheに存在するかどうかを確認し、
  • memcacheにない場合は、データストアのマスターエンティティからmemcacheを更新して、
  • データストアにない場合は、デフォルト値でエンティティを作成し、memcacheを更新して戻ります

もちろん、そのモデルからデータを取得する方法にはさまざまなアプローチがありますが、考え方は同じです。1つのレコードに保存し、memcacheを使用します。

于 2013-03-06T15:51:18.503 に答える
0

production/staging/qa env には個別のアプリ 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 に答える