概要

前回(基本形)のつづき。

今回は 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 値の違い

TrueFalse では Django が以下のように動きを変えるみたい。

DEBUG 値図解

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' と出ている。問題なさそう。

Django 初期状態

 

次回予告

次回は仮想マシンをつくって Apache 経由で動かす。

# おつかれやんした git commit。

$ git add --all
$ git commit -m "設定ファイル分割"

 

現在のフォルダのようす

現在のフォルダのようす