Django
autoreload
uwsgi

django + uwsgi で AutoReload

More than 5 years have passed since last update.


インストール


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