Ubuntu+Rails+PostgreSQL環境構築

UbuntuでRuby on Railsを使った開発をしていて、PostgreSQLを使用しようとして意外とハマってしまった。

一応解決できたものの、このままいくと次の機会も絶対ハマる自信があるため、RailsがSQLite3のデータベースを使って動作する環境に対して、PostgreSQLデータベースに切り替えるにはどうすればいいかといった部分をまとめておく。

PostgreSQLをインストール

ここを参考にしてインストール。

$ pushd /etc/apt/sources.list.d
$ echo 'deb http://apt.postgresql.org/pub/repos/apt/ squeeze-pgdg main' | sudo tee pgdg.list
$ wget –quiet -O – http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add –
OK
$ sudo apt-get update
$ sudo apt-get install postgresql pgadmin3

 

pgAdmin3から新しいサーバ登録で、パスワードエラーになって困ったけど、UbuntuOS上のpostgresユーザと、PostgreSQL上のpostgresユーザのパスワードを同じにすることで、pgAdmin3から接続できるようになった。

 

UbuntuOS上のpostgresユーザのパスワードを設定する。

$ sudo passwd postgres

 

PostgreSQL上のpostgresユーザのパスワードを設定する。

$ su postgres
psql
postgres=# alter user postgres with password ‘my-password’;

 

これで、pgAdmin3からユーザ名postgres、パスワードmy-passwordで接続できるようになった。

pgadmin3

テスト的なRailsプロジェクトから汎用的に使えるrails-developmentデータベースを作成しておくと便利。

今回の記事の以下内容は、rails-developmentデータベースが作成されていて、オーナーがpostgresユーザになっていることが前提。

pg gemをインストール

RailsからPostgreSQLに接続するためには、’pg’というgemをインストールする。

gemをインストール

gem install pgが成功するように、devパッケージをインストールする。

$ psql –version
psql (PostgreSQL) 9.2.3
$ sudo apt-get install postgresql-server-dev-9.2

$ gem install pg

postgresql-server-dev-x.xのバージョンは、psql --versionで調べることができる。

 

Gemfileの設定

$ bundle

Railsから接続してみる

OSのユーザがpostgresユーザ以外のときに接続できない。

StudyRails/on-ubuntu-test$ rails db
FATAL: ??? “postgres” ???(peer)?????????

psql rails-development -U postgresも同様に拒絶される。

pg_hba.confを設定する

OSユーザがpostgresユーザ以外のユーザからpsqlの接続が成功しないのは、pg_hba.confの設定がIDENT認証になっているかららしい。

この認証方式は、PostgreSQLに登録されているユーザ名と、接続元のOSとしてのユーザ名が一致しないと接続を許可してくれないというもの。

[PostgreSQL IDENT認証] by へうげもの

 

PostgresSQLの認証方式を変更する。

$ sudo find / -maxdepth 10 -regex ‘pg_hba.conf’
/etc/postgresql/9.2/main/pg_hba.conf

$ su postgres

$ cd /etc/postgresql/9.2/main

$ cp pg_hba.conf pg_hba.conf.orig

$ vim pg_hba.conf

 

ファイルを開いてみると、ident指定じゃなかった。ローカル接続ではIDENT認証でなくてpeer認証が代わりに使用されるらしい。

pg_hba.confファイル

ローカル接続のauth-methodをpeerからtrustに変更する。

(1行目が初期設定をコメントアウトしたもの、2行目が認証方式をtrustに変更したもの。)

trustにするとパスワードは不要で、ローカルのマシンからなら無条件で接続が許可される。開発環境ならこれで問題ないはず。

 

いちおうデータベースを再起動。

$ su postgres
$ /etc/init.d/postgresql restart

 

これでPostgreSQLに問題無く接続できるようになった

$ rails db
psql (9.2.3)
“help” でヘルプを表示します.

マイグレーションなども問題無くできる。

$ rake db:migrate
== CreatePosts: migrating ====================================================
— create_table(:posts)
NOTICE: CREATE TABLEはシリアル列”posts.id”用に暗黙的なシーケンス”posts_id_seq”を作成します。
NOTICE: CREATE TABLE / PRIMARY KEYはテーブル”posts”に暗黙的なインデックス”posts_pkey”を作成します
-> 0.1047s
== CreatePosts: migrated (0.1048s) ===========================================

== CreatePeople: migrating ===================================================
— create_table(:people)
NOTICE: CREATE TABLEはシリアル列”people.id”用に暗黙的なシーケンス”people_id_seq”を作成します。
NOTICE: CREATE TABLE / PRIMARY KEYはテーブル”people”に暗黙的なインデックス”people_pkey”を作成します
-> 0.0445s
== CreatePeople: migrated (0.0446s) ==========================================

いままでWindows環境だったからコマンドプロンプトでマイグレーションとかしていたけど、Linuxだと文字化けしない。

これだけで感動。・゚・(ノ∀`)・゚・。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=2258