まずDBIが入っていないので、別のPCにインストールしてから、DBI関係だけユーザディレクトリに入れます(例えば、/home/username/rubylib)。そして、スクリプトの先頭で、
#!/usr/local/bin/ruby -I/home/username/rubylib -Ke
のようにするとDBIが使えるようになります。ちなみに、-Iと-Keの順番を逆にしてはいけないようです。
それから、pgstore.rbをいじって新しくDBを作成する部分をコメントアウトし、プロジェクトID名のDBを使っている部分を固定の名前に変更します。本当はテーブル名などにプロジェクトIDを含めるようにすると良いのでしょうがとりあえず今回はいじっていません。
さらに、dbistore.rbをいじってAutoCommitをfalseにします。これをやらないと、create tableした後で、commitする前にそのテーブルのインデックスを作ることになってエラーになってしまいます。もしかしたらDBIやPostgreSQLのバージョンのせいかもしれません。
さらに、DBI 0.0.20を使うとpgstore.rbのpg_execを呼び出しているところでエラーになるので、DBDのPg.rbのDatabaseクラスに、
attr_reader :connection
を追加します。
これで一通りPostgreSQLをバックエンドに使って運用できるようになりました。
さらに、0.8.1のままだとXML形式からPostgreSQLに変換するときに問題がでるようなので、そのパッチを当ててみたらまったく動かなくなってしまいました。どうも色々なパッチをあてまくっているために整合が取れなくなってしまったようです。CVSの最新バージョンにしてしまえば大丈夫?
CVSから最新版を取得してみました。最新はHEADにはないようなので、以下のようにしてrelease-0_8-branchブランチを取得します。
cvs -d :pserver:anonymous@jump.daifukuya.com:/cvs login cvs -d :pserver:anonymous@jump.daifukuya.com:/cvs co \ -P -r release-0_8-branch kagemai
erubyやXML周りのライブラリなどが入っていないので、0.8.1のアーカイブから持ってきます。
とりあえず動くところまで持ってきましたが、どうも0.8.1よりもだいぶ軽くなっているように見えます。XMLFileStoreのままでキャッシュをオフにしなくても問題なく動いているようです。負荷率は高そうですけど。
ちなみに、CVSの最新版ではテーブル作成時のコミットの問題は直っているようなので、AutoCommitをfalseにしなくて良いようです。また、rubyのオプションは-Keから-wに変わっています。
バックエンドをPostgreSQLに変えてみました。キャッシュは自動的にオフになるようです。変換に時間がかかってうまくいかないかと思いましたが(長時間かかるCGIはkillされてしまうらしいので)、5秒くらいしかかかりませんでした。パフォーマンスはなかなか良さそうです。しばらくこれで様子を見てみることにします。
オートコミットはfalseにしなくても良いと書きましたが、フィールドのカスタマイズをするとエラーになる(ビューをdropして、createする間にコミットされていないので)ため、やはりfalseにしないとだめなようです。
もう一つ問題がありました。どうもSMTPサーバがlocalhostからの接続であってもPOP before SMTPを要求するようで、メールが送れるときと送れないときがあります。
最新のCVS版ではmailコマンドでの送信もサポートされたので試しにそちらを使うようにしてみたところ、ヘッダが正しく付きません。mailコマンドだとbodyしか指定が出来ないのですね。コマンドラインでのヘッダの指定はしていないようです。
そこで、mailer.rbにパッチを当ててsendmailコマンドを使うようにしてみました。多少ヘッダが変なのを除けば上手くいっているようです。ヘッダが変というのは、Toにグループアドレスを指定しているはずなのにCcに指定されていることと、Referencesヘッダがリプライ元のメールのMessage-Idと微妙に違うこと、Return-Pathがサーバの方のアドレスになってしまっていることです。微妙ですね。
Referencesがおかしいのはsendmailを使って送信しているのは関係なさそうです。どうやら、PostgreSQLを使っているとおかしくなるようです。
Envelope Fromは、sendmailコマンドの-fでアドレスを指定すると書き換えられるようですが、なぜかメッセージFromやToまで影響を受けるようです。なんだかいまいち動作が良くわかりませんが、大きな問題はなさそうです。
やはり時々エラーになることがあるので、試しにContent-Lengthを削ってみました。今のところうまくいっているように見えますが、時々改行を削ったり追加したりするだけでエラーになったりならなかったりすることがあるので、本当にこれが効いているのかは謎です。