インストール
Django
sudo pip install Django
uwsgi
sudo pip install uwsgi
環境
Django Project の作成
cd ~/dev/sandbox
django-admin.py startproject hello_wsgi
ディレクトリ構成
tree hello_wsgi
├── hello_wsgi
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
└── manage.py
Django 1.4 からは、wsgi.py が作成される
ファイルチェック用のライブラリを Django Project ?reload
Top ディレクトリに配置する。
参考:http://yoshi.o-oi.net/Entry/11/
cd ~/dev/sandbox
curl -O http://projects.unbit.it/uwsgi/export/ad7c6d18232ed1321497c8892c038628a9110891/uwsgidecorators.py
次に、ソースコードが変更されたら、reload するタスク用ファイルを作成します。
参考:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks
xrange 使っているから、Python3 の場合は、python3 のものを使用すること。
cd ~/dev/sandbox
vim task.py
ファイルの内容
task.py
import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload
@timer(3)
def change_code_gracefull_reload(sig):
if autoreload.code_changed():
uwsgi.reload()
uwsgi の設定ファイルの作成
参考:http://projects.unbit.it/uwsgi/wiki/Doc
django.ini
[uwsgi]
# set the http port
http = :8000
# change to django project directory
chdir = /Users/toku/dev/sandbox/hello_wsgi
# load django
module = hello_wsgi.wsgi
import = task
master = True
hello_wsgi/urls.py の、urlpatterns に以下を追加します。
url(r'^$', 'hello_wsgi.views.home', name='home'),
hello_wsgi/views.py に、以下のメッソドを用意します。
from django.http import HttpResponse
import datetime
def home(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s! changed!" % now
return HttpResponse(html)
uwsgi の起動
uwsgi --ini django.ini
これで、Django Project で使用しているファイルが更新された場合、自動更新されるようになりました。
views.py を更新し、ブラウザをリロードすることで変更内容が反映されていることが確認できます。
最終的なディレクトリ構成
hello_wsgi/
├── hello_wsgi
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── django.ini
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── views.py
│ ├── views.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── manage.py
├── task.py
├── task.pyc
├── uwsgidecorators.py
└── uwsgidecorators.pyc