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での環境しか想定してないパッケージなんだろうな。