Djangoでローカル・ステージング・本番環境別の設定をどう分割するか、以下の書籍や記事で記述されています。
- 書籍
- 記事
上記を参考にsettings.py
を分割した際の修正範囲を書き残しておきたいと思います。
修正範囲
以下のコミットを参考に記載します。
環境情報
本記事を書いた(コミットした際)の環境情報です。
1. settings.py
の内容をconfig/settings/env.py
へ分割
config/settings.py
の内容を環境ごとの設定ファイルに分割します。
ファイル | 設定内容 |
---|---|
config/settings/base.py | 共通設定内容 |
config/settings/local.py | ローカル環境の設定内容 |
config/settings/production.py | 本番環境の設定内容 |
私が分割対応した際は、Django Debug Toolbarをローカル環境でのみ有効とする対応をしました。ローカル環境の設定内容config/settings/local.py
は、以下のようなイメージです。
# https://github.com/zakizaki-ri9/python-sandbox/blob/c49c433657f3d150d2e75ca5ff7f794e462facc8/django-rest-tutorial/config/settings/local.py # config/settings/local.py # base.pyから共通設定をインポート from .base import * DEBUG = True # Django Debug Toolbarを有効化 INSTALLED_APPS += [ "debug_toolbar", ] MIDDLEWARE += [ "debug_toolbar.middleware.DebugToolbarMiddleware", ] INTERNAL_IPS = ["127.0.0.1"]
2. BASE_DIR
の修正
config/settings.py
からconfig/settings/base.py
へ階層が深くなったため、BASE_DIR
(プロジェクトのベースフォルダ)を以下に修正します。1
# https://github.com/zakizaki-ri9/python-sandbox/blob/c49c433657f3d150d2e75ca5ff7f794e462facc8/django-rest-tutorial/config/settings/base.py#L15-L17 # config/settings/base.py # BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.path.dirname
を1つ追加・括ることで、一階層上のディレクトリ(ルートディレクトリ)を指すようになります。
3. ローカル・本番環境の設定ファイルを読み込む
django-admin startproject config
後、変更していないければ、以下で設定ファイルの読み込みを行なっています。
config/manage.py
config/wsgi.py
それぞれ以下のように修正します。
# https://github.com/zakizaki-ri9/python-sandbox/commit/c49c433657f3d150d2e75ca5ff7f794e462facc8#diff-6a6b249dd0d4b2836634706d26f7bdf0L8-L9 # config/manage.py # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
# https://github.com/zakizaki-ri9/python-sandbox/commit/c49c433657f3d150d2e75ca5ff7f794e462facc8#diff-11002d4a5ad099d4417bae2e08328d75L14-L15 # config/wsgi.py # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")
おわり
Railsだと、デフォルトで環境ごとに設定ファイルを使用する仕組みが提供されていました。
改めてRailsの汎用性の高さを思い知りました。
しばらく触らなくなると思うと、少し寂しい気持ちになります...。
以上になります。内容に不備等ありましたら、フィードバックいただけると幸いです。