One-Click RubyのDBIライブラリ経由でPostgreSQLに接続しようとしたらハマる

PostgreSQLのDBMSをインストール。

DBMSをインストールすればドライバもインストールされるが

別のサーバに接続するなら、ドライバだけ入れれば良いかもしれない。

One-Click Rubyを普通にインストールする。

(ここで、”One-Click Ruby”なんて空白が入ってるディレクトリに

インストールすると後々困ることなるから注意)

まずは、RubyのPostgreSQLライブラリを入れる。

http://rubyforge.org/frs/?group_id=3214&release_id=32804

から”pg-0.8.0-x86-mswin32-60.gem”をダウンロードして

gem install pg-0.8.0-x86-mswin32-60.gem -l でローカルからgemでインストール。

なぜか、ネットからはインストール出来なかった。

次に、DBIとDBD-Pgを入れる

gem install dbd-pg で依存でdbiも一緒にインストールされるはず。

irbを起動し DBI.connect("DBI:Pg:database=hoge;host=127.0.0.1", "postgres", "postgres")

で接続できるか確認。

なんかエラーがでた。

DBI::InterfaceError: Could not load driver (uninitialized constant DBI::TypeUtil)

from C:/One-Click-Ruby/lib/ruby/site_ruby/1.8/dbi.rb:368:in `load_driver'

from C:/One-Click-Ruby/lib/ruby/site_ruby/1.8/dbi.rb:233:in `_get_full_driver'

from C:/One-Click-Ruby/lib/ruby/site_ruby/1.8/dbi.rb:219:in `connect'

from (irb):3

いろいろ調べてみるうちに、lib/ruby/site_ruby/1.8/dbi.rb:368:in `load_driver' って

gem で dbi がインストールされたなら gemsディレクトリ配下へインストールされるのに

エラー出してる dbi が site_ruby だ。違ってる。

site_ruby\1.8\dbi.rb と site_ruby\1.8\dbiをリネームする。

それで、もう一度、今度は、libeay32.dll ssleay32.dll でエラーがでる。

どうやらエラーの内容からDLLが古いみたいなので、

http://www.limber.jp/?Software%2FOpenSSL%20for%20Windows

から、openssl-0.9.8k-win32-bin_dynamic.zip を貰ってきて

ruby.exeと同じディレクトリあるDLLを差し替える。

今度は、Libpq.dllがないよと怒られたので、C:\Program Files\PostgreSQL\8.3\bin\をPATHに加えて、もう一度やり直したら接続できた。

One-Click Ruby に標準で入ってるdbiはなんか駄目だった。

RubyのposgreSQLライブラリとdbd-pgとの相性(バージョン?)があわなかったのかもしれない。

まあ、MySQLでの環境しか想定してないパッケージなんだろうな。