Django 運用環境の構築
ナビゲーションに移動
検索に移動
Django 運用環境の構築
注意点
- Pythonのバージョンにより mod_python をソースからコンパイルする
- httpd_devel をインストールしないと、mod_python がコンパイルできない
- PostgreSQLの共有ライブラリを /usr/lib 等にコピーして利用できるようにしておく必要あり
インストール
mod_python のインストール
Apache、Python は以下のバージョン(うまくいかなければ改めてソースから・・・)
- mod_python 3.2.8-3.1
- httpd-2.2.3-5
- python 2.6.2 r262
<blockquote>Pythonを 2.4 から 2.6にしていたため、yumで取得したバイナリとは Pythonのバージョンが異なり失敗。以下、ソースからコンパイルを行う。2.4 なら問題ない。</blockquote>
# yum install mod_python Loading "installonlyn" plugin Setting up Install Process Setting up repositories Reading repository metadata in from local files Parsing package install arguments Resolving Dependencies --> Populating transaction set with selected packages. Please wait. ---> Downloading header for mod_python to pack into transaction set. mod_python-3.2.8-3.1.i386 100% |=========================| 26 kB 00:00 ---> Package mod_python.i386 0:3.2.8-3.1 set to be updated --> Running transaction check Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: mod_python i386 3.2.8-3.1 core 257 k Transaction Summary ============================================================================= Install 1 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 257 k Is this ok [y/N]: y Downloading Packages: (1/1): mod_python-3.2.8-3 100% |=========================| 257 kB 00:00 Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: mod_python ######################### [1/1] Installed: mod_python.i386 0:3.2.8-3.1 Complete!
Windows 用に以下のサイトでバイナリが配布されている
<blockquote>Python2.6 用は提供されていない模様 2010/01/21時点</blockquote>
ソースからインストール
ソースのダウンロード
# wget http://ftp.kddilabs.jp/infosystems/apache/httpd/modpython/mod_python-3.3.1.tgz
解凍
# tar xvf mod_python-3.3.1.tgz mod_python-3.3.1/ mod_python-3.3.1/test/ mod_python-3.3.1/test/testconf.py.in mod_python-3.3.1/test/httpdconf.py :
httpd-devel のインストール
mod_so.c が存在するかを確認
# httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c
httpd-devel のインストール
# yum install httpd-devel : i386 0:2.1.22-4 db4-devel.i386 0:4.3.29-9.fc6 expat-devel.i386 0:1.95.8-8.2.1 openldap-devel.i386 0:2.3.30-3.fc6 Dependency Updated: httpd.i386 0:2.2.6-1.fc6 openldap.i386 0:2.3.30-3.fc6 Complete!
apxs がどこにインストールされたかな
# find / | grep apxs /usr/share/man/man8/apxs.8.gz /usr/sbin/apxs
コンパイル
configure
- apxs および Pythonのバージョンも正しく検知されたっぽい
# ./configure --with-apxs=/usr/sbin/apxs : checking for --with-apxs... /usr/sbin/apxs executable, good : checking for --with-python... no checking for python... /usr/local/bin/python checking Python version... 2.6 checking Python install prefix... /usr/local checking checking where python libraries are installed... /usr/local/lib/python2.6 config.status: creating dist/Makefile :
make
# make : Compiling for DSO. : Now su and make install (or, if you only want to perform a partial install, you can use make install_dso and make install_py_lib)
make install
#make install Performing DSO installation. /usr/bin/install -c -d /usr/lib/httpd/modules /usr/bin/install -c src/mod_python.so /usr/lib/httpd/modules Now don't forget to edit your main config and add LoadModule python_module /usr/lib/httpd/modules/mod_python.so and if your configuration uses ClearModuleList, then also AddModule mod_python.c :
テスト
- mod_python が動作しているかテストする
Httpサーバーのドキュメントルート /var/www/html/ に、pytest というフォルダを作成し、mptest.py ファイルを置く
- mptest.py
from mod_python import apache def handler(req): req.write("mod_python worked!") return apache.OK
/etc/httpd/conf/httpd.conf に以下の記述を追加
<Directory "/var/www/html/pytest"> AddHandler mod_python .py PythonHandler mptest PythonDebug On </Directory>
LoadModule python_module /usr/lib/httpd/modules/mod_python.so
Apache を再起動し、mptest.pyにアクセス
- 再起動
# /sbin/service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
Django の設定
httpd.confの編集
- http://michilu.com/django/doc-ja/modpython/
- http://www.python.jp/doc/contrib/modpython/inst-configure.html
- 以下を追記
- PythonPath ディレクティブでプロジェクトのパスを指定
<Location "/py/mysite"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonPath "sys.path+['/var/www/html/py']" PythonDebug On </Location>
- ソースコードからコンパイルした場合、以下も忘れずに追記
LoadModule python_module /usr/lib/httpd/modules/mod_python.so
以下のエラー
<blockquote>yum でバイナリをインストールしたため、以下のエラー。ソースコードから再インストールを行う。</blockquote>
- 現在の環境は、もともとPython2.4 がデフォルトで入っていたところに、2.6を入れいているが、mod_python 自体もバイナリは Python2.4 でコンパイルされている?
Mod_python error: "PythonHandler django.core.handlers.modpython" Traceback (most recent call last): File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 287, in HandlerDispatch log=debug) File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 461, in import_module f, p, d = imp.find_module(parts[i], path) ImportError: No module named django
- いったん削除
# yum erase mod_python : Running Transaction Removing : mod_python ######################### [1/1] Removed: mod_python.i386 0:3.2.8-3.1 Complete!
チュートリアルで作成したアプリケーションを呼び出してみる。
エラー
ImproperlyConfigured: Error loading psycopg2 module: libpq.so.5: cannot open shared object file: No such file or directory
- バックエンドに設定した、[PostgreSQLのライブラリを認識していないようだ|http://wiki.minaco.net/index.php?cmd=read&page=Python%2FDjango%2F%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB]
# cp /usr/local/pgsql/lib/libpq.so.5 /usr/lib # ldconfig
テスト
mysite.urls.py
urlpatterns = patterns(, (r'^py/mysite/firsttest/$', 'mysite.firsttest.views.index'), )
mysite.firsttest.views.py
# -*- encoding: utf-8 -*- from django.http import HttpResponse def index(request): return HttpResponse('Hello Django!')
OK
© 2006 矢木浩人