バージョン違いのTrac(Trac0.12rc1とTrac0.10)の混在環境をmod_pythonで構築してみる実験
社内で利用中のTracのバージョンが0.10で、多少のカスタマイズがされていたり、時間が取れないとか、バージョンアップするためのモチベーションがなかったとか、そういったことがあって、0.10環境を使い続けていました。
今度の0.12は、マルチリポジトリというすばらしい機能が追加されていて、今度はバージョンアップする気満々です。
ですが、0.10の環境を0.12に、一気にバージョンアップするというのは、運用中の環境なので難しいという事情があり、段階移行を考えようと思い立ちました。
段階移行に当たって、混在環境が可能かどうかの調査をしました。また、実験環境を構築し動作しているようですので、その手順を公開します。
環境について
- CentOS 5.3環境に、yumでセットアップしたTrac0.10(0.10-5)をあらかじめ用意
- 上記環境にTrac0.12を追加で導入する
- /opt/trac-0.12rc1 に配置する
- mod_pythonで両方のバージョンを動作させる
- python2.4
- とりあえず実験環境なので、DBはsqliteを使う(ちなみに実環境はPostgresql)
参考にした情報
手順
CentOS5.3にyumでTrac0.10-4を導入
-
- 省略します
Trac0.12の導入
基本的にはhttp://jamz.jp/tech/2008/06/how-to-install-trac-0_12_dev.htmlの手順で行いました。
- easy_install/setuptoolsが未導入なら
wget http://peak.telecommunity.com/dist/ez_setup.py python ./ez_setup.py yum install python-setuptools
- Trac0.12が利用するPyhonのライブラリを導入
easy_install Genshi easy_install Babel easy_install Pygments easy_install docutils easy_install textile
SilverCityは、Pygmentsが入ったので、無視でよいみたいです。SilverCity – The Trac Project
- Trac0.12の導入
wget http://ftp.edgewall.com/pub/trac/Trac-0.12rc1.tar.gz tar xzvf Trac-0.12rc1.tar.gz cd Trac-0.12rc1 mkdir /opt/trac-0.12rc1 python setup.py compile_catalog -f python setup.py build python setup.py install --root /opt/trac-0.12rc1/
- これで、以下のようにファイルが配置される
vi /usr/bin/trac-admin-012
-
- 次のようにする
#!/bin/sh # export PYTHONPATH=/opt/trac-0.12rc1/usr/lib/python2.4/site-packages /opt/trac-0.12rc1/usr/bin/trac-admin $@
-
- 実行権付与
chmod +x /usr/bin/trac-admin-012
- 同様にTracdのラッパーも作ります
vi /usr/bin/tracd-012
-
- 次のようにする
#!/bin/sh # export PYTHONPATH=/opt/trac-0.12rc1/usr/lib/python2.4/site-packages /opt/trac-0.12rc1/usr/bin/tracd $@
-
- 実行権付与
chmod +x /usr/bin/tracd-012
Tracの環境(trac-admin initenvする)のために必要なものを準備する
Python2.4だと、追加でpysqliteの導入をします。TracInstall – The Trac Project
- pysqlite未導入だとinitenvしたときにエラーが出ます
プロジェクトの生成と初期化 initenv 失敗: '/var/www/html/trac012/test-new' tracenv が作成できません。 SQLite 向け Python バインディングをロードできません Traceback (most recent call last): File "usr/lib/python2.4/site-packages/trac/admin/console.py", line 413, in do_initenv File "usr/lib/python2.4/site-packages/trac/env.py", line 221, in __init__ File "usr/lib/python2.4/site-packages/trac/env.py", line 408, in create File "usr/lib/python2.4/site-packages/trac/db/api.py", line 145, in init_db File "usr/lib/python2.4/site-packages/trac/db/api.py", line 195, in get_connector TracError: <unprintable instance object> initenv 失敗: '/var/www/html/trac012/test-new' 1 Traceback (most recent call last): File "usr/lib/python2.4/site-packages/trac/admin/console.py", line 418, in do_initenv SystemExit: 1
- gccがpysqliteのビルドに必要なので、入ってなければ導入します
yum groupinstall "Development Tools" -y
- pysqliteの導入
- 必要なものをダウンロード
yum install sqlite-devel -y wget http://pysqlite.googlecode.com/files/pysqlite-2.6.0.tar.gz tar xzvf pysqlite-2.6.0.tar.gz cd pysqlite-2.6.0
-
- 設定ファイルの編集
vi setup.cfg
-
-
- 設定ファイルのincludeとlibのファイルパス変更
-
#include_dirs=/usr/local/include include_dirs=/usr/include #library_dirs=/usr/local/lib library_dirs=/usr/lib
-
- ビルドとインストール
python setup.py build_static install
mod-pythonでTrac0.10/0.12を混在して動作させる
- trac0.12用のhttpd設定
vi /etc/httpd/conf.d/trac0.12.conf
-
- 以下のようにします(/trac012にアクセスすると、Tracプロジェクト一覧が見える)
<Location /trac012> SetHandler mod_python # PythonDebug On PythonPath "['/opt/trac-0.12rc1/usr/lib/python2.4/site-packages'] + sys.path" PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend # PythonOption TracEnv /path/to/trac/project PythonOption TracEnvParentDir /var/www/html/trac012 PythonOption TracLocale ja_JP.UTF8 PythonOption PYTHON_EGG_CACHE /tmp/.trac012-python-egg-cache PythonOption TracUriRoot /trac012 </Location> <LocationMatch "/trac012/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /opt/trac-0.12rc1/.htpasswd Require valid-user </LocationMatch>
- PythonPathの指定がミソです。
この指定が無いと、Trac0.12のコードが読まれません。
また、PythonPath "sys.path + ['/opt/trac-0.12rc1/usr/lib/python2.4/site-packages']" というように、sys.pathを先に書くと、/usr/lib/python2.4/site-packages以下あたりの、Trac0.10のPythonコードが読み込まれてInternalErrorとなります。(Database newer than Trac version)
- あと、0.12からはmod_pythonの設定方法が今までとは変わっているようですのでバージョンアップ時には注意が必要ですね。
mod_pythonでの動作確認
- httpdのリスタート
servce httpd restart
- WEBブラウザで、trac012/test-newにアクセスする
-
- わかりにくいですが、0.10も動いています