概要
前回(基本形)のつづき。
今回は Django の設定ファイル settings.py を for_test.py と for_production.py のふたつに分ける。
- for_test.py
- ローカルで
python manage.py runserver
で動かすとき用。 DEBUG = True
- データベースは Sqlite を使用。
- ローカルで
- for_production.py
- CentOS で wsgi.py 経由で動かすとき用。
DEBUG = False
- データベースは MySQL を使用。
ほんで for_test のほうが正常に動くか確認する。 for_production のほうは Apache で動かすほうだからまたあとで確認。
DEBUG 値の違い
True
と False
では Django が以下のように動きを変えるみたい。
True | False | |
---|---|---|
コンテンツ | 表示する | 表示する |
静的ファイル | 表示する | 無視(セキュリティ上の理由) |
エラー | 表示する | 無視(本番でエラーを表示しちゃいかん) |
よって本番環境では False
にして、かつ静的ファイルやエラーについては次のように処理する。
- 静的ファイルは Apache に代わりに配信してもらう。
- エラーはコード内でキャッチして、ログに残すだの、通知を飛ばすだの、あるいは
True
のときと同じように画面に表示する(開発中はこれが見やすい)。
設定ファイルを複数つくる
# settings フォルダと中身を作成。
$ mkdir config/settings
$ mv config/settings.py config/settings/base.py
$ touch config/settings/for_test.py
$ touch config/settings/for_production.py
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__))))
for_test.py 編集
base の内容がまんまテスト用設定なのでそれをインポートするだけ。
from .base import *
for_production.py 編集
今回の記事ではまだ MySQL の設定は扱わないから記述しない。 DEBUG
値を変えるだけにとどまる。
from .base import *
# 静的ファイルとエラーを配信しない。
DEBUG = False
# DEBUG False にする場合これを書かないとだめ。将来的に自サイトのドメインを書く。
ALLOWED_HOSTS = ['*']
#
# ここに MySQL の設定を書く予定。
#
# ここに Apache 環境下での静的ファイルについて設定書く予定。
#
複数の設定ファイルを使い分ける
テスト用環境と本番環境では、起動スクリプトが違う。だから各環境で違う設定ファイルを使いたかったら、各起動スクリプトに、違う設定ファイルを読み込むよう書けばいい。
manage.py 編集
for_test.py は manage.py から読み込む。
# これを
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
# こうする
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.for_test')
wsgi.py 編集
for_production.py は config/wsgi.py から読み込む。
# これを
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
# こうする
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.for_production')
動作確認
wsgi.py のほうは Apache 経由で起動するやつだからまだ試せないけれど、すくなくとも for_test を読み込んだ manage.py がちゃんと動くか確認。
$ python manage.py runserver
Performing system checks...
(略)
Django version 2.1.8, using settings 'config.settings.for_test'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
using settings 'config.settings.for_test'
と出ている。問題なさそう。
次回予告
次回は仮想マシンをつくって Apache 経由で動かす。
# おつかれやんした git commit。
$ git add --all
$ git commit -m "設定ファイル分割"