RailsでPostgreSQLを使うには、database.ymlにPostgreSQLのデータベース情報を記述します。
環境
- OS: Ubuntu Server 14.04
手順
- PostgreSQLをインストールし、データベースを作成する。
- RailsにPostgreSQL用のgemを導入する。
- Railsのdatabase.ymlをPostgreSQL用に記述する。
ステップ1. PostgreSQLをインストールし、データベースを用意する
ここでは次のデータベースを用意するものとします。
- データベース名: rails_db
- ユーザ名: rails_user
- パスワード: rails_pass
手順については、こちらのUbuntuへのインストールとデータベースの作成ポストに記載しました。
RailsでPostgreSQL用のgemを使う時に、追加で次のパッケージが必要となるのでインストールしておきます。
$ sudo apt-get install libpq-dev
ステップ2. PostgreSQL用のgemを導入する
gemfileを開き、pg gemを追加します。
gem 'pg'
gemをインストールします。
$ bundle install
ステップ3. database.ymlを更新する
database.ymlを開き、次のようにします。development, test, productが全て同じ設定になっているので、適時変更します。ここではdevelopment環境のみ使用する前提でこのまま進めます。
# config/database.yml default: &default adapter: postgresql database: rails_db username: rails_user password: rails_pass host: 127.0.0.1 encoding: utf8 development: <<: *default test: <<: *default product: <<: *default
動作確認1
rails dbconsoleコマンドでデータベースクライアントが開けるか確認します。
$ rails dbconsole
開けた場合は次のように表示されるので、\q で終了します。
データベース名=> \q
動作確認2
次にデータベース自体の破棄、作成が行えるかを確認します。
$ rake db:migrate:reset
データベースユーザにデータベースの作成権限が無いと失敗します。
PG::InsufficientPrivilege: ERROR: permission denied to create database
これを解決するためには、データベースユーザにデータベースの作成権限を付与します。次のように、PostgreSQLのターミナルでALTER ROLEによりCREATEDBオプションを付与します。
$ sudo -u postgres psql postgres=> ALTER ROLE rails_user WITH CREATEDB; ALTER ROLE
正しく権限が付与されたか \duコマンドで確認します。rails_user | Create DBのようになっていればOKです。
postgres=> \du
補足: 権限を外す場合はALTER ROLEによりNOCREATEDBオプションを付与します。