読者です 読者をやめる 読者になる 読者になる

Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

django備忘録27 Settings for Different Environments

開発段階ごとのSettings.py の設定方法

  • webfaction を利用する(会員登録などを済ませる)

  • settings.py を設定していく

ローカル(開発環境)では、DEBUG=True 運用時には、DEBUG = Falseにしたい。

  • settings フォルダを作る(projectルート?settings.pyがあるところ)

  • settings フォルダ内に、init.py を作成する(空のデータでいい。) python フォルダと認識させるため。

  • 今のsettings.pyをrenameして、old_settings.pyにする。(移管用に残しておく)

  • settings/base.py を作成する → old_settings.pyをひとまず全て、コピペする

  • wsgi.py の内容を確認する。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "trydjango18.settings")

というところがあるが、これは、settings.py(現在のold_settings.py)をsetするという意味になっているので、ここは以下のような設定が必要。

  • settings/init.py の中に、以下のコードを挿入する。
from .base import *

from settings.base.py から、import * 全てをimportする?という意味のコード? init.py にそのコードを書くので、settingsを呼び出した段階で、上記のコードが読み込まれるため、 trydjango18.settings(.init)ということに等しい設定になっているということなのか?

  • settings/base.py のDIR関連もちょっと修正が必要。なぜなら、 src/trydjango18/settings/base.py というようにちょっと階層が変わっているから。(以前は、src/trydjango18/settings.py だったんで、階層が1つ深くなっている。)

解決策は、一番簡単な方法で、BASE_DIRに、もう一つ階層を加えるというやり方がある。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  • init.py にtry, exceptのコードを追加して、環境ごとにファイルを読み込む準備をする

settings/init.py

from .base import *

try:
    from .local import *
except:
    pass

try:
    from .production import *
except:
    pass

try:
    from .imac import *
except:
    pass

try:
    from .macbookpro import *
except:
    pass
  • 試しに、local.pyに、base.pyを全てコピペして、DEBUG=Falseにして、runserverしてみる。 すると、多分、local.pyを読み込んで、DEBUG=Falseのため、runserver できないとなるはず。

  • ALLOWED_HOSTS = [*] にして、再度試すとDEBUG=Falseの状態で、runserverできるので、試してみる。

  • テストできたら、local.pyの設定は、元に戻しておく(debug=true, allowed_hosts=[])