データベースとの接続(PostgreSQL編)

2012/02/19

『改訂新版 基礎Ruby on Rails』 読者サポートページ > Rails本番環境構築ガイド

以下、PostgreSQLをインストールして、Railsアプリケーションから接続するまでの手順を示します。

リモートマシンにsudo権限を持つユーザーでSSH接続し、コマンドを順に実行してください。なお、% はコマンドプロンプト、# はpsqlのプロンプトを示します。これらの文字は入力しないでください。

PostgreSQLサーバのインストール、初期化、起動

CentOS 6.2

% sudo yum install postgresql-server postgresql-devel
% sudo service postgresql initdb
% sudo service postgresql start

2012年2月22日現在、バージョン8.4.9-1がインストールされます。

Ubuntu Server 10.04 LTS

% sudo apt-get install postgresql

2012年2月18日現在、バージョン8.4.10がインストールされます。CentOS 6.2の場合と異なり、データ領域の初期化とサーバの起動まで自動で進みます。

PostgreSQLサーバの初期設定

セットアップ作業の前にPostgreSQL上のユーザーpostgresとasagaoのためのパスワードを決めてください。mkpasswdコマンドを使って強いパスワードを作るとよいでしょう。ここでは、次の2つを使うことにします。

  • gnDwPsFVM5kMU (postgres)
  • diiNv2bid4aTI (asagao)

念のためこれらのパスワードは /root ディレクトリに記録しておきましょう。

% sudo -s
% echo "gnDwPsFVM5kMU" > /root/postgres_postgres_password
% echo "diiNv2bid4aTI" > /root/postgres_asagao_password
% chmod 400 /root/postgres_*_password
% exit

asagaoユーザーとasagao_productionデータベースを作ります。

% sudo su - postgres
% createuser -a asagao
% createdb -E UTF8 -O asagao asagao_production -T template0
% psql -c "alter user postgres with password 'gnDwPsFVM5kMU'"
% psql -c "alter user asagao with password 'diiNv2bid4aTI'"
% exit

次に、ローカルホストから誰でもすべてのデータベースにパスワード認証でログインできるようにPostgreSQLの設定を変更します。

この設定変更をしないと、Linuxユーザー名とデータベース名が異なる場合にデータベース接続が失敗します。

% sudo vi /var/lib/pgsql/data/pg_hba.conf # Cent OS 6.2 の場合
% sudo vi /etc/postgresql/8.4/main/pg_hba.conf # Ubuntu Server 10.04 LTS の場合

pg_hba.conf を開き、ファイルの末尾付近にある

local  all  all  ident

という行を

local  all  all  md5

に変更します。そして、PostgreSQLサーバに新しい設定を反映させます。

% sudo service postgresql reload # Cent OS 6.2 の場合
% sudo service postgresql-8.4 reload # Ubuntu Server 10.04 LTS の場合

asagao_productionデータベースにログインを試みます。

% psql -U asagao asagao_production

「Password for user asagao:」に対して正しいパスワードを入力して、次のような画面が表示されればログイン成功です:

psql (8.4.10)
Type "help" for help.

asagao_production=# 

PostgreSQLの対話ターミナルを抜けます。

# \q

データベース接続の切り替え

% sudo su - rails
% cd asagao

エディタで Gemfile を開き、

gem "sqlite3"

gem "pg"

に変更します。そして、Bundlerでpgライブラリをインストールします。

% bundle install

続いて、エディタで config/database.yml を開き、

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

という部分を削除して、代わりに次のコードを書き入れます。

production:
  adapter: postgresql
  database: asagao_production
  username: asagao
  password: diiNv2bid4aTI
  encoding: utf8

同じマシン上でPostgreSQLサーバが動いている場合、host, port, socketなどの項目を指定しないでください。

% RAILS_ENV=production rake db:schema:load
% RAILS_ENV=production rake db:seed

Railsアプリケーションの再起動

% touch tmp/restart.txt

目次