Djangoはsettings.py
を読み込んでから起動します。
設定ファイルを読み込むことで、動作に必要な情報などを取得して、それを元に起動するという動作になっています。
実は設定ファイルは複数用意して切り替えるのが普通です。
例えば、自分のパソコンで開発するとき、テストするとき、サーバーにデプロイして起動するとき、などです。
これらはそれぞれデータベースが違ったり、静的ファイルのパスが違ったりします。そういった差異を吸収してどの環境でも動作させるために設定ファイルを切り替えます。
本稿では設定ファイルの切り替えにフォーカスして解説します。
設定ファイルの書き方については長くなるので別稿で解説します。
環境変数での切り替え
最もよく使う切り替え方がこの環境変数によるやり方です。
環境変数を定義しておけばDjangoが起動する際に自動的に環境変数を取得して、読み込むべき設定ファイルを読み込んでくれます。
環境変数はデフォルトでDJANGO_SETTINGS_MODULE
です。
MacやLinuxなどのUNIX系のOSであれば、export
で環境変数を設定します。
export DJANGO_SETTINGS_MODULE=settings.dev
環境変数には、ドット区切りでのパスを設定します。
settings.dev
やsettings.prod
のようにします。モジュール指定と同じですね。
ちなみにこの環境変数の取得はmanage.py
に記述されているので確認するのも簡単です。
しかし、変数名を変更する必要はありません。
一時的に変更する
次に、一時的に変更する場合について説明します。
例えば、テストの時などに一時的に環境を変更したいことがあります。
先ほど紹介した環境変数を使用すると、シェルを終了するなどして環境変数が消えない限り、常に環境が切り替わったままになってしまいます。
そこでテストの時のみ環境を切り替えたい、といった要望が出てくるわけです。
そういった時に使えるテクニックです。
やり方はこちらも簡単で、コマンドラインにオプションとして--settings 設定ファイルのパス
を追加するだけです。
python manage.py runserver --settings settings.dev
このようにすると、このコマンドで実行された時のみ環境が変更されます。
まとめ
Herokuのようなサービスでは、環境変数を設定できるようになっています。
また、DockerなどでデプロイするときもDockerファイルに環境変数を指定しておくなどすれば手軽に環境を変更することができます。
環境変更は初歩的な内容ですが、必須になる知識ですので覚えておいてください。