diadia

興味があることをやってみる。独学で勉強しています。初心者から始めたので困ったことを書いて同じ境遇の方のヒントになればと思います。

製品用と開発用にsettings.pyを分けると便利

settings.pyを製品用と開発用に分ける理由

製品用と開発用にsettings.pyを使い分けると便利になる。それは製品と開発環境で作業を行き来する際に有用なのだ。開発環境では例えばsettings.pyのDEBUGをTrueに変更しなければならない。製品ではFalseに戻さなければならない。それは面倒だし、この変更中に記述ミスしてしまったら、バグ解消に時間がかかってしまう。そこで予め本番用の環境と開発用の環境を分けておくことsettings.pyの編集を省ける。これが有用な理由だ。ちなみに以下が本番と開発間の変更すべき項目である。

DEBUG =   # FalseまたはTrue
DATABASES = {} #sqlit3または任意の
ALLOWED_HOSTS 
staticやmedia関係の設定

やり方

環境

  • python3.6
  • django2.1
  • nginxを使用
  • postgresqlを使用
  • gunicornを使用

運用イメージ

デフォルトのsettings.pyを本番環境用として使用する。local_settings.pyを開発環境用として使用する。そして製品環境、開発環境で以下のコマンドを使い分ける。

# 製品環境(デプロイ)
$ python manage.py runserver

# 開発環境 DJANGO_SETTINGS_MODULEを指定してrunserver
$ python manage.py runserver --settings config.local_settings

config/local_settingsと入力するとエラーが出るし、config.local_settings.pyでもエラーが出てしまうので注意する。

ファイルの作り方

settings.pyの内容をlocal_settings.pyにコピーする。本番用のsettings.pyにおいて以下の項目を製品環境設定に変更する。

#オリジナルのsettings.pyがあるディレクトリにて
production_settings.py を作成 

settings.pyの内容をコピーしてlocal_settings.pyに貼り付ける。そしてコピー元のsettings.pyの内容を変更する。

DEBUG = False
# 自分の場合はpostgresqlを使う
DATABASES = {
    'default': {
        'ENGINE'   : 'django.db.backends.postgresql',
        'NAME'     : "project", #postgresqlで作成したデータベース名(この場合だとCREATE DATABASE project ;)
        'USER'     : "*****",
        "PASSWORD" : "*****",
        "HOST"     : "localhost",
        "PORT"     : "5432",
    }
}

ALLOWED_HOSTS = ['*.*.*.*']
STATIC_URL = '/static/'
STATIC_ROOT = '/usr/share/nginx/html/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/usr/share/nginx/html/media'
STATICFILES_DIR = [os.path.join(BASE_DIR, 'static')]