RailsでPostgreSQLを使うまでの設定

久しぶりにRailsアプリをPostgreSQL使って作ろうとしたときに詰まったのでまとめておく。 普段はMBA使ってるけど、家のiMacでやったのでインストールから。

$ brew install postgresql
$ brew link postgresql
$ pg_ctl -D /usr/local/var/postgres start

起動までできたので、DB一覧を表示してみるとエラー

$ psql -l
psql: could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

エラーメッセージをググってみると、みんなぶつかるものらしく解決策がすぐ見つかった。

ありの日記 : MacBook AirにPostgreSQLをbrewでインストールした

Macにデフォルトでインストールされているものが邪魔しているらしい。which psqlをみてみると確かにbinの位置がそうだった。この問題、brewではあるあるだなぁ・・・。

ということで、修正バッチをもってきて実行する。

$ cd /usr/local/Cellar/postgresql
$ curl -o fixBrewLionPostgresql.sh http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh
$ chmod 777 fixBrewLionPostgresql.sh
$ ./fixBrewLionPostgresql.sh

もう一度DB一覧を取得してみると無事うまく行く。

$ psql -l

ようやくRailsに。DBをPostgreSQLに指定して新規作成。

$ rails new posgreApp -D postgreSQL

できたのでDBを作ろうとするとまたエラーが出る。

$ cd postgreApp
$ rake db:create
   ・
   ・
   ・
could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
   ・
   ・
   ・

こっちは、rakeが探しにいく/var/pgsql_socket以下にソケットが作られていない問題だった。
ググるStackOverFlowに解決方法のってた。
lsでみてみると、そもそも/var/pgsql_socketディレクトリが存在していない。
今作られているソケットを探して、rakeが見に行く所にリンクを貼ってあげる。

$ sudo find / -name .s.PGSQL.5432
$ mkdir -p /var/pgsql_socket
$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket

これでrakeを実行すると正常に実行できる。
今回はソケットファイルをリンクしたけど、postgresql.conf内でunix_socket_directoryで/var/pgsql_socketを指定して再起動しても動くはず。