0
1

Django Apachでsettingを分ける

Posted at

Djangoを本番環境でデプロイするときにsetting.pyを分けたい。
DEBUGやDATABASESなどが環境で分けたくなる。
以下のようにsettingディレクトリを作成し、もともとのsetting.pyをbase.pyにリネーム、init.pyの空ファイルを作成する。

project_name
├─ project_name
│    ├─ settings
│    │    ├─ __init__.py    # 空ファイル
│    │    ├─ base.py        # 共通設定
│    │    ├─ development.py # 開発環境設定
│    │    └─ production.py  # 本番環境設定
│    └─ urls.py
│    └─ wsgi.py
└─ manage.py

変更箇所

環境変数を設定する

shell
$ export DJANGO_SETTINGS_MODULE=project_name.settings.production

BASE_DIRを定義する階層が一つ深くなったのでparentを追加する。

base.py
- BASE_DIR = Path(__file__).resolve().parent.parent
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent

環境変数が設定されていないときproject_name.settings.developmentを読み込む。

manage.py
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings.development ')

wsgiは環境変数を読み込めない。しかしwsgiを使うのは本番環境だけなのでデフォルトでproductionを指定する。

wsgi.py
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings.production ')

上の方法でもできるがdotenvを用いて.envにDJANGO_SETTINGS_MODULEを環境変数設定しておき読み込むことでwsgiが環境変数を読み込めないことをクリアし、manage.pyもwsgiもデフォルトをdevelopmentに設定できるかもしれない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1