LoginSignup
7
10

More than 5 years have passed since last update.

django + uwsgi で AutoReload

Posted at

インストール

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
7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10