!!!Django 運用環境の構築
[Django][Python]
{{amazon 4048672096}}
*[mod_python マニュアル|http://www.python.jp/doc/contrib/modpython/index.html]
::注意点
+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
""Pythonを 2.4 から 2.6にしていたため、yumで取得したバイナリとは Pythonのバージョンが異なり失敗。以下、ソースからコンパイルを行う。2.4 なら問題ない。
# 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 用に以下のサイトでバイナリが配布されている
*http://ftp.riken.jp/net/apache/httpd/modpython/win/3.3.1/
""Python2.6 用は提供されていない模様 2010/01/21時点
!!ソースからインストール
*http://httpd.apache.org/modules/python-download.cgi
!ソースのダウンロード
# 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 に以下の記述を追加
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
LoadModule python_module /usr/lib/httpd/modules/mod_python.so
::Apache を再起動し、mptest.pyにアクセス
*再起動
# /sbin/service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
*http://192.168.24.14/pytest/mptest.py
{{ref_image mod_py01.jpg}}
!!Django の設定
!httpd.confの編集
*http://michilu.com/django/doc-ja/modpython/
*http://www.python.jp/doc/contrib/modpython/inst-configure.html
*以下を追記
**[PythonPath ディレクティブ|http://www.python.jp/doc/contrib/modpython/dir-other-pp.html]でプロジェクトのパスを指定
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonPath "sys.path+['/var/www/html/py']"
PythonDebug On
*ソースコードからコンパイルした場合、以下も忘れずに追記
LoadModule python_module /usr/lib/httpd/modules/mod_python.so
::以下のエラー
""yum でバイナリをインストールしたため、以下のエラー。ソースコードから再インストールを行う。
*現在の環境は、もともとPython2.4 がデフォルトで入っていたところに、[[2.6を入れいている|Django インストール]]が、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!
![[チュートリアルで作成したアプリケーション|Django 最初のアプリケーション 1]]を呼び出してみる。
*http://192.168.24.14/py/mysite/polls/
::エラー
ImproperlyConfigured: Error loading psycopg2 module: libpq.so.5: cannot open shared object file: No such file or directory
*[[バックエンドに設定|PostgreSQL 8.3.5 インストール]]した、[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
{{ref_image mod_py02.jpg}}