Rails
PostgreSQL

インストールからRails-PostgreSQL環境を整える

More than 3 years have passed since last update.

環境

$ psql --version
psql (PostgreSQL) 9.3.10

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

$ bundle list
  * pg (0.18.3)
  * rails (4.2.4)
  ...

PostgreSQLの設定

$ sudo apt-get install postgresql
# installするとPostgreSQLのサービスがバックで走る
$ /etc/init.d/postgresql status
9.3/main (port 5432): online
# PostgreSQLのroot userであるpostgresユーザとしてpsqlを実行する
$ sudo -u postgres psql

これから設定するrailsプロジェクトのロールを準備します。

postgres=# create role projectname with createdb login password 'password';
postgres=# \q

Railsの設定

$ rails new projectname -TB --database=postgresql
$ cd projectname

このままbundle installするとpgがエラーとなるので、依存関係をインストールしておきます。

$ sudo apt-get install libpq-dev

必要なgemをインストールします。

Gemfile
source 'https://rubygems.org'

gem 'rails', '4.2.4'
gem 'pg'

# scaffold確認用に必要
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
$ bundle install --path vendor/bundle

railsと先ほど作ったPostgreSQLのロールを関連付ける為、config/database.ymlを編集します。

config/database.yml
default:
  adapter: postgresql
  encoding: unicode
  pool: 5
  # 以下の3つを追加
  username: projectname
  password: password
  # RailsサーバとPostgreSQLサーバが同じ場合
  host: localhost
development:
  <<: *default
  database: projectname_development
test:
  <<: *default
  database: projectname_test

rake db:setupに必要なdb/schema.rbを生成します。

$ rake db:migrate

その後に、projectname_developmentprojectname_testという名前のデータベースを作成します。

$ rake db:setup

データベースを利用してみましょう。

$ rails g scaffold Post title:string body:text
$ rake db:migrate
$ rails s

準備ができたので、localhost:3000/postsにブラウザでアクセスして動作を確かめてみてください。

参考

https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres