Mac OSX(Snow Leopard)でTrac0.11.5.ja1+PostgreSQL8.4環境を作ったよ
WorktimePluginをPostgreSQLで使ってみたい方がおられるので、対応を試みるために、MacにPostgreSQL環境を作りました。ちなみにPostgreSQLを触るのはこれが初めて!
構築中に結構はまってしまったので、せっかくのでメモっておきます。誰かの役に立つと良いですが、わざわざOSX上に作る人はいないと思われw
- PostgreSQLのインストール
- http://lets.postgresql.jp/documents/tutorial/macosx/を参考にインストール。
- MacPortsを使った方法もありますが、今回は参考ページどおりにEnterpriseDB社が提供してくれている1clickインストーラを使用しました。再起動が必要ですけど楽チンです。
- pyPgSQLのインストール
- TracはPythonで作られているので、PythonからPostgreSQLに接続するためにPython用のドライバみたいなのが必要です。Tracの公式サイトをみると、psycopg2をサポートと書いてますが、ShibuyaTracに要望を挙げてくれている方はpyPgSQLを使用なので、今回はpyPgSQLで構築しました。(pyPgSQLも使えるけど若干問題があるらしい)
- このpyPgSQLが曲者でした。インストールに超はまることに...
- Macではバイナリは提供されていないので、ソースからインストールする必要があります。http://pypgsql.sourceforge.net/からpyPgSQL-2.5.1.tar.gzをダウンロードしてビルドします。その前に、PostgreSQLのライブラリを参照できるように、パスも通しておきます。
export PATH=/Library/PostgreSQL/8.4/bin:$PATH export PATH=/Library/PostgreSQL/8.4/include:$PATH python setup.py build python setup.py install
- mxDateTimeのインストール
- pyPgSQLはmxDateTimeというライブラリに依存しているようで、別途インストールする必要があります。
- http://www.egenix.com/products/python/mxBase/からダウンロードし、インストール。なお、UCS2版とUCS4版のどちらをインストールするかは、下記コマンドで確認しました。(参考:http://hisawo.blogspot.com/2009/10/trac0115jainstall.html#install_mxdatetime)
python -c "import sys;print(sys.maxunicode<66000)and'UCS2'or'UCS4'"
-
- そしてインストール実行
python setup.py install
- PostgreSQLにTrac用のDB作成
- Trac用のDBを作成します。アプリケーション/PostgreSQL 8.4/SQL Shell (psql).appを実行し、PostgreSQLのインストール時に設定したパスワードで接続。以下のコマンドを実行して専用ユーザとDBを作成。
CREATE USER trac WITH PASSWORD 'trac'; CREATE DATABASE trac WITH OWNER=trac ENCODING='UNICODE';
- Tracプロジェクトの作成
- trac-admin (パス) initenv で新規プロジェクトを作成します。ここで普段はSQLiteですが、PostgreSQLに変えます。
Database connection string [sqlite:db/trac.db]> postgres://trac:trac@localhost/trac
-
- さて、これでうまくいくと思いきや、以下のエラーが発生
Symbol not found: _PQbackendPID
-
- とりあえずググると、http://benkreeger.com/personal/snow-leopards-python-2-6-site-packagesに解決策がのっています。Snow Leopardからの問題のよう。デフォルトで入っているPython2.6を使用している場合は、以下のコマンドを実行して32bitモードで動かせとのこと。
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
-
- 上記コマンド実行後、再度pyPgSQLのビルド&インストール->mxDateTimeのインストールを行う(mxDateTimeも入れ直さないと、見つからないとエラーが出てしまった)
- もう一度initenvし直すと、今度はプロジェクトの作成に成功。
- Tracプロジェクトのupgradeでこける現象に対応
- WorktimePluginの検証のためにプラグインをインストールしてtrac-adminでupgradeすると、pg_dumpの引数が不正(-dなんてないよ)と怒られて正常にupgradeできず。確かに、PostgreSQL8.4のドキュメントをみると、pg_dumpに-dオプションはない。PostgreSQL7のドキュメントには-dオプションはあるので、Trac側が対応していないっぽい。/Library/Python/2.6/site-packages/Trac-0.11.5.ja1-py2.6.egg/trac/db/postgres_backend.pyの117行目にオプション指定があるので、-dオプションを単純に削除してみた。
# args = [self.pg_dump_path, '-C', '-d', '-x', '-Z', '8'] args = [self.pg_dump_path, '-C', '-x', '-Z', '8']
-
- とりあえずこれで怒られずにupgradeできました。
- (追記) http://trac.edgewall.org/ticket/8759にチケットとして登録されていました。PostgreSQL8.4から-dオプションは無くなったとのこと。代わりに、--insertsとやるのが正しいらしい。
# args = [self.pg_dump_path, '-C', '-d', '-x', '-Z', '8'] args = [self.pg_dump_path, '-C', '--inserts', '-x', '-Z', '8']
これでようやくWorktimePluginの検証ができる環境が整いました。