まず、pgadmin からアクセスできるようにしよう。
デフォルトでは postgres ユーザのパスワードが分からないので、パスワードを設定する。
sudo passwd postgres で好きなパスワードを設定する。(今回は仮に12345とする)
次に su - postgres で postgres ユーザになり、PostgreSQL にログインする。
$ psql template1 template1 =# alter user postgres with password '12345'; template1 =# \qつまり、パスワードを合わせておくということ。
これで pgadmin を立ち上げると postgres ユーザとして localhost のサーバを登録できるはず。
せっかくなので、ここでデータベースとログインロールを作っておこう。
pgadmin から GUI で作ることもできる。(割愛)
postgres ユーザで psql でログイン。
psql =# createdb test; psql =# create role rails with login password '98765'; psql =# \q
先に rails のプロジェクトも作っておこう。
$ rails test -d postgresql
database.yml を変更しておこう。
development: adapter: postgresql encoding: utf8 database: test pool: 5 username: rails password: 98765
次に pg_hba.conf を修正する。
ファイルは /etc/postgresql/8.4/main/pg_hba.conf にあった。
見つからない場合、sudo find / "pg_hba.conf" -type f でもやってみよう。
sudo vim /etc/postgresql/8.4/main/pg_hba.conf と vim を起動する。
すると下記のような設定になっていた。
# Database administrative login by UNIX sockets local all postgres ident # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5このままではパスワードでログインできないので、パスワードでログインできるように設定する。
で、ここでハマった。
事前調査の結果、"rails では TCP socket でアクセスするので、local じゃなくて host を変更する"と認識していた。
#host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 passwordと変更すればいい、って情報があったのでこの一行を編集し PostgreSQL を再起動した。
$ sudo /etc/init.d/postgresql-8.4 restartしかし、マイグレーションが失敗する。
手動でテーブル作って、script/console からデータの登録や取得をしようとしても失敗する。
で、悩みつつあれこれトライ&エラーを繰り返してみた結果、結局こういうことだった。
・database.yml で host: localhost 設定がされていれば、TCP socket を使用する。
・host: localhost 設定がされていない(host 設定がない)場合、UNIX socket を使用する。
つまり、デフォルトで作られた設定ファイルには host 設定がなかったので、
local all all identの設定で接続しようとしていた。
#local all all ident local all all passwordと変更してやると、接続できマイグレーションも実行できた。
しかし、開発環境は別にどちらでもいいが、本番などは外部サーバにアクセスすることも多々あるし、一律 TCP での設定にしておいたほうがいいかなーと思ったので、database.yml に host: localhost の設定を追加して、host 設定の方を password にすることにした。
これで、rails から PostgreSQL に接続する設定(+α)は終了。
0 件のコメント :
コメントを投稿