uwsgiとDjangoとリロード
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
前回Nginx+uwsgi+Djangoの環境を構築したけど、修正したソースを反映するのにリロード用のファイルを更新しないと出来ない問題を対策しました。
まぁ普通に公式サイトのドキュメントに対策が書いてました。
公式ドキュメント

方法としてタイマー処理で常にソースの更新時間を確認して必要であればuwsgiプロセスを再起動する力技です。
その為、たまに反映されてない?と思ったら再度ブラウザーをリロードしてみてください。

まずプログラムからuwsgiを操作する為のライブラリーをコピーします。

curl -O http://projects.unbit.it/uwsgi/export/ad7c6d18232ed1321497c8892c038628a9110891/uwsgidecorators.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の設定ファイルに追記します。

uwsgi:
import: autoreload
以下省略・・・




2011/11/03 14:07 | Comments(0) | TrackBack() | プログラム
NginxとuwsgiとDjango
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
さくらVPS上にDjangoの開発環境を構築してみました。

それぞれのバージョンです。
・Fedora 14 x86_64
・Nginx 1.0.8
・Python 2.7
・uwsgi 0.9.9.2
・Django 1.3.1
・mysql 5.5.17

■Nginxのインストール

デフォルトのyumレポジトリーは0.8x系だったので追加しました。
yumレポジトリーファイル

cp nginx.repo /etc/yum.repos.d/nginx.repo
yum install --enablerepo=nginx nginx


Django用に仮想ホストの設定ファイルを用意します。
仮想ホスト設定ファイル

cp sns.conf /etc/nginx/conf.d/

server_nameの値は環境にあわせて修正してください。

■uwsgiのインストール
fastcgiは個人的にあまり良いイメージがないのでwsgiにしました。
Pythonはデフォルトで2.7がインストールされていたのでそのまま。
他に必要な依存ライブラリをインストールします。

yum install python-setuptools
yum install python-devel.x86_64
yum install libxml2-devel.x86_64
yum install gcc.x86_64


Pythonのパッケージ管理?らしきpipを利用してuwsgiをインストールしました。
rubyのrvmのようにバージョン別に環境を用意できるようなのですが、めんどくさかったので特に意識しないで利用しました。

easy_install pip
pip install uwsgi


daemonで起動できるように適当に起動スクリプトを作成しました。
起動スクリプトファイル
起動設定ファイル
設定ファイル

cp uwsgi.init /etc/rc.d/init.d/uwsgi
cp uwsgi.sysconfig /etc/sysconfig/uwsgi
cp uwsgi.yaml /etc/uwsgi.yaml
chkconfig --add uwsgi


■Mysqlのインストール

この辺はありきたりな方法でさくっと。

rpm -Uvh http://rpms.famillecollet.com/remi-release-14.rpm
yum install --enablerepo=remi mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64


Python用のドライバをpipでインストール

pip install mysql-python


Django用にデータベースを作成

mysql -u root
create database sns_development default character set utf8;
grant all privileges on sns_development.* to sns@'localhost' identified by 'sns';
flush privileges;


■Djangoのインストール

pipでインストールします。

pip install django

便利や・・・

あとは普段と同じようにDjangoプロジェクトを作成してサービスを起動します。

/etc/rc.d/init.d/uwsgi start
/etc/rc.d/init.d/nginx start


ソースを修正した後は/tmp/reload.txtをtouchコマンドなどで更新すると反映されます。Passengerに似ていますね。
開発時はわざわざ更新するのがめんどいので毎回読み込むように設定をしたいのですが方法がわかりませんでした。。。

2011/11/03追記
ソース更新をチェックしてuwsgiを再起動することで対応できました。
こちらをどうぞ


2011/10/30 15:37 | Comments(0) | TrackBack() | プログラム

<<前のページ | HOME | 次のページ>>