Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Django トラノマキ

Django トラノマキ

更新:2013-10-15
バージョン:0.1.3
作者:@voluntas
URL:http://voluntas.github.io/

概要

自分が Django で開発/テスト/デプロイする上で色々便利そうな知識をまとめていく

書きたい事

  • Ansible を使った自動デプロイの方法
  • pytest を使ったテストランナのデフォルト設定
  • PyMySQL + Gevent を使った非同期化
  • Django + supervisor を使った監視
  • nginx + uwsgi + django のデプロイ方法
  • Django + Celery

別冊

調査予定

uWSGI
http://projects.unbit.it/uwsgi/
andrewgodwin / south — Bitbucket
https://bitbucket.org/andrewgodwin/south/
toastdriven/django-tastypie
https://github.com/toastdriven/django-tastypie
django-debug-toolbar/django-debug-toolbar
https://github.com/django-debug-toolbar/django-debug-toolbar/tree/master
dcramer/django-devserver
https://github.com/dcramer/django-devserver
esnme/ultrajson
https://github.com/esnme/ultrajson
celery/celery
https://github.com/celery/celery
mher/flower
https://github.com/mher/flower
martinrusev/django-redis-sessions
https://github.com/martinrusev/django-redis-sessions
sebleier/django-redis-cache
https://github.com/sebleier/django-redis-cache
tomchristie/django-vanilla-views
https://github.com/tomchristie/django-vanilla-views/tree/master
kmike/django-widget-tweaks
https://github.com/kmike/django-widget-tweaks

nginx + uwsgi の設定

nginx + uwsgi がまぁ安定して早いらしいということで、設定を見ていく

uwsgi は gevent を使用しないプロセスワーカーモデルで

settings 戦略

バージョン:1.5.4

settings.py を開発用と分けたい、ただし本番の settings.py を上書きする形で使いたい。

  • settings.py で local_settings.py を import して上書きする
  • local_settings.py で settings.py を from settings import * 使って上書きする

settings.py をそのまま使うのでは無く、 settings というアプリを作りそこに最低限必要な base.py を作るという戦略がよさそうである。

project/
    core/
        # ここに settings.py 置かない
    settings/
        base.py

さらに settings アプリの下に開発用、ステージング、CI など用に色々 settings を残すのがよさそう。

settings/
    base.py
    develop.py
    ci.py

アプリを作った場合は python manage.py --settings=settings.develop などと指定する必要がある。

開発関連の設定が含まれているのが develop とする。django-debug-toolbar などが含まれる想定である。 さらにデータベースを MySQL 等では無く SQLite を使うようにする。

ここで develop.py は base.py の設定を全て読み込むようにする

from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'develop.db',
    }
}

try:
    from local_settings import *
except:
    pass

さらに develop.py の一番下には local_settings.py を読み込むようにしておく

この設定を追加することで気軽に「自分だけの設定」を読み込ませることが出来るようになる。 開発ツールで自分だけがよく使うものなどはここに入れるのが良い。

manage.py

manage.py は「開発」限定でしか使わないように改造する

#!/usr/bin/env python

import settings.develop
from django.core.management import execute_manager

execute_manager(settings.develop)

まとめ

  • settings アプリを追加する
  • settings/base.py を定義する
  • settings/develop.py では base を全て引き継ぎ local_settings.py を読み込むようにする
  • develop 以外にも好きに設定を追加して良い

参考

パーフェクトな Django の設定ファイル -- Kosei Kitahara's Blog
http://surgo.jp/2010/02/django.html
Django How-To: Add Debugging Apps to Your Local Settings
http://blog.christopherlawlor.com/2010/06/django-how-to-add-debugging-apps-to-your-local-settings/
django - Local setting for INSTALLED_APPS using Fabric - Stack Overflow
http://stackoverflow.com/questions/9392540/local-setting-for-installed-apps-using-fabric

参考

Test-Driven Web Development with Python
http://chimera.labs.oreilly.com/books/1234000000754/index.html
rtfd/readthedocs.org
https://github.com/rtfd/readthedocs.org
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment