Mac OSX(Snow Leopard)でTrac0.11.5.ja1+PostgreSQL8.4環境を作ったよ

WorktimePluginPostgreSQLで使ってみたい方がおられるので、対応を試みるために、MacにPostgreSQL環境を作りました。ちなみにPostgreSQLを触るのはこれが初めて!

構築中に結構はまってしまったので、せっかくのでメモっておきます。誰かの役に立つと良いですが、わざわざOSX上に作る人はいないと思われw

  • PostgreSQLのインストール
    • http://lets.postgresql.jp/documents/tutorial/macosx/を参考にインストール。
    • MacPortsを使った方法もありますが、今回は参考ページどおりにEnterpriseDB社が提供してくれている1clickインストーラを使用しました。再起動が必要ですけど楽チンです。
  • pyPgSQLのインストール
    • TracPythonで作られているので、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
python -c "import sys;print(sys.maxunicode<66000)and'UCS2'or'UCS4'"
    • そしてインストール実行
python setup.py install
  • PostgreSQLTrac用の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

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の検証ができる環境が整いました。