Djangoの設定ファイルの読み込みを実行環境ごとに分けてみる
ローカルの開発環境と本番の実行環境とでDjangoを動かすときに、データベースの設定やDEBUGフラグの設定など、都度都度切り替えるのもめんどくさいので、なにかよい方法がないかと色々と試してみたのでその過程をメモっておきます。
いくつか環境の情報をあげておきます。
ローカルの環境は
MacOSX+Pycharm
本番環境は
CentOS6+Docker(Ubuntu)で、DockerのUbuntu上でGunicorn+Djangoで動かしています。
Djangoが読み込むsettings.pyは基本的には本番環境の設定を記載しています。
ローカル環境で実行するときはPycharmのterminalから
python manage.py runserver
を実行しています。
最初はこのコマンドの引数に
python manage.py runserver --mode=dev_local
という形で引数を与えてから実行しよとしたのですが、manage.pyは設定できるオプションに限りがあるようで断念。
色々と調べていくと、こちらで設定ファイルをオプションで指定できることがわかりました。
Django settings | Django documentation | Django
そこで私が考えた方法は
1.まずは本番の設定ファイルを読み込む。
2.引数に指定されている設定ファイルの内容を元に基本の設定ファイルの情報を上書き
という形で実装しようと思いました。
今回はローカルの開発環境なのでlocal_settings.pyというファイルを用意し
python manage.py runserver --settings=local_settings
というコマンドを指定することにしました。
これであれば、ステージング環境やちょっと設定ファイルが異なる環境を複数用意するのも簡単だからです。
local_settings.pyはこのように書いてます。
from my.settings import * DEBUG = True HOSTNAME = "{ローカルのホスト名}" DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'hoge', 'USER':'hoge', 'PASSWORD':'hoge', 'HOST':'127.0.0.1', } }
一点詰まったところがありました。
from my.settings import *
この部分。
PHPの感覚が影響して、import = requireという認識があったので最初は
from my import settings
とやっいて、この記述で settingsの中に記述されている変数は展開されると思ってたけど、実際はそうじゃなかったです(^_^;)
まだまだ勉強が足りませんな。
なお、こちらのサイトも参考にしました。
こちらのサイトのほうがおすすめされているようですね。i2bskn.hateblo.jp