django の settings.py を本番と開発で分ける
参考
【Django】settings.pyを分割する際の修正範囲
階層
before
.
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py # 削除
│ ├── urls.py
│ └── wsgi.py
└── manage.py
after
.
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings # 作成
│ │ ├── __init__.py # 作成
│ │ ├── base.py # 作成
│ │ ├── development.py # 作成
│ │ └── production.py # 作成
│ ├── urls.py
│ └── wsgi.py # 修正
└── manage.py # 修正
ファイルの修正
base.py
settings.py の内容を base.py に全て移します。
settings.py を削除します。
階層が深くなったので base.py の BASE_DIR に「.parent」 を一つ付け加えます。
【base.py】
BASE_DIR = Path(__file__).resolve().parent.parent.parent # 修正後
wsgi.py
本番環境でWSGI から呼び出されたときには production.py 使用するように修正します。
【wsgi.py】
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.production') # 修正後
application = get_wsgi_application()
manage.py
開発環境で manage.py から呼び出されたときには development.py を使用するように修正します。
【manage.py】
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development') # 修正後
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
production.py
本番環境のみで使用するファイルを production.py に記載します。今回は下記の 3 点のみとします。
【production.py】
from .base import *
DEBUG = False
ALLOWED_HOSTS = ["111.222.333.444"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'production_database',
'USER': 'django_user',
'HOST': 'production',
'PORT': 3306,
}
}
development.py
開発環境のみで使用するファイルを development.py に記載します。今回は下記の 3 点のみとします。
【development.py】
from .base import *
DEBUG = True
ALLOWED_HOSTS = ["*"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'development_database',
'USER': 'django_user',
'HOST': 'development',
'PORT': 3306,
}
}
base.py
production.py や development.py に書き出した DEBUG や ALLOWED_HOSTS DATABASES の項目を settings.py から削除します。
ディスカッション
コメント一覧
まだ、コメントがありません