環境は Windows7 Home (32bit) 。Windows ローカルで動いている PostgreSQL (8.4) に Ruby 1.9.2 からアクセスできればよい。ただ...やり取りするデータ量が多いので libpq が使う必要がある。libpq のラッパーモジュール pg (ruby-pg) があるが、C 拡張なのでインストールは案の定つまずいた。しかし使い慣れない Windows にどうにか入れることができたのでここにメモしておく。
Windows用の Ruby はRubyInstallerのバイナリ(RubyInstaller 1.9.2-p136)を利用。あわせて同じサイトで配布している DevKit も入れる。これに migw32-gcc や make などが入っていて拡張モジュールのビルドなどに必要。その辺のインスト手順はサイトの説明通りで出来たので省略。
肝心の pg のインストから:
gem install pg
とやるが、DevKit とか入れている割にさくっとは逝かなかった。エラーログには
Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... ERROR: Error installing pg: ERROR: Failed to build gem native extension. C:/Ruby192/bin/ruby.exe extconf.rb checking for pg_config... yes Using config values from C:\Program Files\PostgreSQL\8.4\bin/pg_config.exe extconf.rb:13:in ``': No such file or directory - C:\Program Files\PostgreSQL\8. 4\bin/pg_config.exe --includedir (Errno::ENOENT) from extconf.rb:13:in `'
と出ている。コンパイル以前の問題。しかしよくエラーメッセージを見ると pg_config のパスに \ と / が混在している。ext/extconf.rbを見ると
if pgconfig = find_executable( pgconfig ) $CPPFLAGS << " -I%s" % [ read_cmd_output(pgconfig, '--includedir') ] $LDFLAGS << " -L%s" % [ read_cmd_output(pgconfig, '--libdir') ] endあたりでとまっているのが判った。単に pgconfig を正しく設定すれば良さそう。extconf.rb にパスを直書きし
if pgconfig = find_executable( pgconfig ) pgconfig='c:/progra~1/postgr~1/8.4/bin/pg_config' $CPPFLAGS << " -I%s" % [ read_cmd_output(pgconfig, '--includedir') ] $LDFLAGS << " -L%s" % [ read_cmd_output(pgconfig, '--libdir') ] end
ruby extconf.rb を実行すると Makefile が出来た。あとは make, make installでさくっと拡張モジュールを作成。
DevKit 万歳である。
作業前に DevKit にちゃんとパスを切らないとgccは起動しないし make も見つからない。作業前にc:\DevKit\devkitvars.bat を呼ぶ。これを呼んでおくとドス窓で ls とかやってもエラーにならずファイル一覧が見られる。cp とか rm も入っていた。
ローカルのPostgreSQLを平文パスワードで使う分には問題なく Ruby からアクセスできた。openssl とか使う場合はどうなんだろう? DevKit に openssl のライブラリが入っていたりするのかな..? (謎)
0 件のコメント:
コメントを投稿