アプリをHerokuにdeployしたらSQLエラーが出てしまったので、 ローカルでの開発もPostgreSQLを使ってみようと思います。
PostgreSQLのインストール
ちなみにインストール先のOSはamazon-linuxです。
$ sudo yum -y install postgresql93
$ sudo yum -y install postgresql93-devel
$ sudo yum -y install postgresql93-server
$ psql –version
psql (PostgreSQL) 9.3.6
データベースの初期化
$ sudo /etc/init.d/postgresql93 initdb
データベースの起動
$ sudo /etc/init.d/postgresql93 start
サーバー起動時にpostgresの起動設定
$ sudo chkconfig postgresql93 on
PostgreSQLアカウントの設定
まずは PostgreSQL にスーパーユーザ(postgres)で接続し、パスワードを設定します。
$ sudo -u postgres psql
postgres=# alter role postgres with password ‘hogehoge’; # alter role [user_name] with password ‘[password]‘;
データベースの作成
わかりやすいようにデータベース名とRailsのアプリ名(myapp)を同じにします。 ついでにテスト(RSpec)用のデータベースも作成しておきます。
postgres=# create database myapp owner postgres; # create database [database_name] owner [user_name];
postgres=# create database myapp_test owner postgres;
アクセス権限の設定
Rails から PostgreSQL に接続するために、pg_hba.conf
の設定を変更します。
/var/lib/pgsql93/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
#local all all peer <= コメントアウト
local all all md5 <= コメントイン
変更後は、PostreSQL と Nginx を再起動
$ sudo /etc/init.d/postgresql93 restart
$ sudo /etc/init.d/nginx restart
Rails側の設定
アプリを作成する前に、PostgreSQL を初めて使う場合は、先にpg gem
をインストールしておきます。
$ gem install pg
アプリの作成
-d
パラメータでDBでPostgreSQLに指定する
$ rails new myapp -T -d postgresql
接続先情報の設定
先ほど作成したデータベースとアカウントの情報を設定します。
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: myapp
username: postgres
password: hogehoge
test:
<<: *default
database: myapp_test
username: postgres
password: hogehoge
###(おまけ) PostgeSQLのコマンド
- データベース一覧を取得する … \l
- データベースを選択する … \c [データベース名]
- テーブル一覧を取得する … \z
- テーブルスキーマを取得する … \d [テーブル名]
- ユーザ(Role)の一覧 … \du
- パスワードの変更 … alter role [ロール名] with password ‘[新しいパスワード]‘;
- データベースの作成 … create database [データベース名] owner [ロール名];
- データベースの削除 … drop database [データベース名];