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件のデータで動くように設定しました。
おかげでサクサク快適な開発環境と相成りました。