2011/06/08

[小ネタ]Google App Engine / Python でローカルと本番サーバとで動作を変える方法



Google App EngineはさすがGoogleさん提供のクラウドサービスなだけあって、本番環境に公開したプログラムは非常に高速で動作します。

反面ローカル環境ではデータ量が増えると、起動やアプリケーションのレスポンスが極端に劣化してしまいます。



またFacebookアプリケーションを作成する場合には
ローカル環境と本番環境とで別のAppIdを使いたいですよね。

本番環境にアップロードする度にプログラムを書き換えるのはイヤなものです。


では、どうするか。

答え

setting.py を作成し、os.environ.get("HTTP_HOST", "")でホスト名を取得します。

あとは取得したホスト名ごとに定数を定義すればOK。

以下の例では

  • ローカル環境でのみTrueになる IS_LOCAL
  • ローカル環境、本番環境、それぞれで使用するFacebookの認証情報(FACEBOOK_APP_ID, FACEBOOK_APP_SECRET)

を定義しています。

setting.py

import os

host = os.environ.get("HTTP_HOST", "")
if(host != "localhost:8080"):
 # 本番サーバの設定
 IS_LOCAL = False
 FACEBOOK_APP_ID = 'xxxxxxxxxx'
 FACEBOOK_APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
else:
 # ローカルの設定
 IS_LOCAL = True
 FACEBOOK_APP_ID = 'yyyyyyyyy'
 FACEBOOK_APP_SECRET = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyy'

index.py

import setting, facebook

# FacebookのOAuth認証
user = facebook.get_user_from_cookie(self.request.cookies
         , setting.FACEBOOK_APP_ID
         , setting.FACEBOOK_APP_SECRET)

if setting.IS_LOCAL:
 # ローカルでのみ動作させたい処理
 doSomethingOnLocal()


将棋Fun』では、最初ローカル環境でも13000件の棋譜データを使用していたのですが、ちょっとお話にならないくらい起動もレスポンスも遅かったので、ローカル環境でのみ100件のデータで動くように設定しました。


おかげでサクサク快適な開発環境と相成りました。


 

Comments