Rubyから PostgreSQLを使う

 
Rubyから PostgreSQLを使おうとして、ちょっとつまづいたので、後進の人のためにメモ。
入れようとした環境はこんな感じ。

  • Ubuntu 9.04(サーバ版)
  • ruby 1.8.7
  • Rails (2.1.0) + passenger (2.0.1)
  • psql (PostgreSQL) 8.3.9

つまり、少し古い Rubyと Railsが動いていて、かつ、PostgreSQLも動いていて、いま動いているものは変えたくないということ。
 

やったことはこんなこと。
1.なぜか、gemが入っていなかったので、インストール。(一応、古い方にしてみた)
[code]
# apt-get install rubygems1.8

# gem list –local
*** LOCAL GEMS ***
actionmailer (2.1.0)
actionpack (2.1.0)


[/code]
やっぱ、入ってたんだと思うんだけど。
 
2.libpq-devもインストール。
[code]
# apt-get install libpq-dev
[/code]
 
3.いよいよ、dbiをインストール。
[code]
# gem install dbi
Updating metadata for 1 gems from http://gems.rubyforge.org/
.
complete
ERROR: could not find dbi locally or in a repository

# gem update
Updating installed gems
Updating metadata for 1 gems from http://gems.rubyforge.org/
.
complete
Nothing to update
[/code]
ここでつまづく。ないってどうよ?
updateしてないかもと思って、やってみたけど、おかしいところはなし。
apt-get update はちょっとやりたくないので、以下、レポジトリに頼らずにインストールする。

[code]
# wget http://rubygems.org/downloads/dbi-0.4.5.gem
# wget http://rubygems.org/downloads/deprecated-2.0.1.gem

# gem install deprecated-2.0.1.gem –local
Successfully installed deprecated-2.0.1
1 gem installed
Installing ri documentation for deprecated-2.0.1…
Installing RDoc documentation for deprecated-2.0.1…

# gem install dbi-0.4.5.gem –local
Successfully installed deprecated-3.0.0
Successfully installed dbi-0.4.5
2 gems installed
Installing ri documentation for deprecated-3.0.0…
Installing ri documentation for dbi-0.4.5…
Installing RDoc documentation for deprecated-3.0.0…
Installing RDoc documentation for dbi-0.4.5…
[/code]
 
4.次は、dbd-pgをインストール。これもレポジトリに頼らずに。
[code]
# wget http://rubygems.org/downloads/dbd-pg-0.3.9.gem
# wget http://rubygems.org/downloads/pg-0.9.0.gem

# gem install pg-0.9.0.gem –local
Building native extensions. This could take a while…
Successfully installed pg-0.9.0
1 gem installed
Installing ri documentation for pg-0.9.0…
Installing RDoc documentation for pg-0.9.0…

# gem install dbd-pg-0.3.9.gem –local
Successfully installed dbd-pg-0.3.9
1 gem installed
Installing ri documentation for dbd-pg-0.3.9…
Installing RDoc documentation for dbd-pg-0.3.9…
[/code]
これで、ようやっと、インストール完了。
 
5.irbでテスト。
[code]
# irb

> require ‘rubygems’
> require ‘dbi’
> dbh = DBI.connect(“dbi:Pg:test_db:localhost”, “test_db_user”, “testpassword”)
DBI::OperationalError: FATAL: password authentication failed for user “test_db_user”
[/code]
「psql test_db -U test_db_user -W」でちゃんと通るパスワード入れてるのにエラーではじかれた。
違うユーザ使ったらOKになったので、きっと grantの関係だと思うがまだ調べてない。
 
調べた。きっとココだと思う。
[code]
# e /etc/postgresql/8.3/main/pg_hba.conf

local all postgres ident sameuser
local all test_db_user trust
local all all trust
host all all 127.0.0.1/32 md5
[/code]
[code]
# psql test_db -U postgres

psql: FATAL: Ident authentication failed for user “postgres”
[/code]
postgresは ident認証がかかっているので、エラーになる。(ログインしようと思ったら、su postgres でユーザを切り替える)
これでいくと、test_db_userは trustになっているので、ダメなのではないかと。
DBI.connect はリモート接続だから、md5によるパスワード認証じゃないとダメだよ、ということじゃないかと自分は納得しました。

0 返信

返信を残す

Want to join the discussion?
Feel free to contribute!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です