-
Notifications
You must be signed in to change notification settings - Fork 8
07 設定ファイル
Yoshiya edited this page Apr 1, 2016
·
1 revision
設定ファイルを local, development, staging, production 環境別に配置できることは重要です。 例えば、データベースの接続、外部 API のクライアント ID その他サービスの起動時に決定される定数が この設定ファイルの項目になります。 データベースの接続URLは環境によって異なることが普通なので、それぞれの環境の設定ファイルを用意し、 異なるURLを記述しておけば、起動時にアプリケーションに現在がどの環境なのかを教えるだけでしかるべき 設定情報を元に起動できます。
設定の仕方としては、設定を init.py へ記述し、各環境毎の設定項目をクラスベースで作成し、 init.py の基底クラスを拡張するとよいでしょう。
コードベースでは例えば以下の用になります。
application/
|- app.py
|- config/
|- __init__.py
|- local.py
|- development.py
|- staging.py
|- production.py
# __init__.py
class BaseConfig(object):
MYSQL_URL = None
MYSQL_PORT = None
REDIS_URL = None
REDIS_PORT = None
# development.py
from config import BaseConfig
class DevelopmentConfig(BaseConfig):
MYSQL_URL = 'mysql+pymysql://yourdomain.com'
MYSQL_PORT = 3306
REDIS_URL = 'yourdomain.com'
REDIS_PORT = 6379
なお、これらの設定ファイルを app.py から環境別に呼び出してみましょう。 それには Flask の設定読み込みメソッド config.from_object を 用います。例えば引数から設定を渡してみる場合
# app.py
from flask import Flask
import argparse
if __name__ == '__main__':
flask = Flask(__name__)
parser = argparse.ArgumentParser()
parser.add_argument('-e', '--env', help='環境変数',
type=str, choices=['local', 'dev', 'stg', 'prd'],
default='local')
args = parser.parse_args()
# 起動時の引数毎に読み込ませる設定が異なる
env = args.env
if env == 'local':
flask.config.from_object('config.local.LocalConfig')
elif env == 'dev':
flask.config.from_object('config.development.DevelopmentConfig')
elif env == 'stg':
flask.config.from_object('config.staging.StagingConfig')
elif env == 'prd':
flask.config.from_object('config.production.ProductionConfig')
else:
flask.config.from_object('config.BaseConfig')
flask.run(host='0.0.0.0')