Help us understand the problem. What is going on with this article?

[*Rails*] 開発環境用DBをSQLite3からPostgreSQLに変更する 

More than 3 years have passed since last update.

はじめに

Ruby on Railsチュートリアル第3章 ほぼ静的なページの作成の演習3の、開発環境のDBをSQLite3からPostgreSQLに変更する演習についてやってみたのでまとめる。
環境は以下の通り。

  • CentOS6.5(Vagrant)
  • Ruby2.0.0
  • Rails4.0.5

手順

Gemfileは以下。(Railsチュートリアルに記載してあるものと同じ)

Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.5'
gem 'pg', '0.15.1'

group :development, :test do
  gem 'rspec-rails', '2.13.1'
end

group :test do
  gem 'selenium-webdriver', '2.35.1'
  gem 'capybara', '2.1.0'
end

gem 'sass-rails', '4.0.5'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'rails_12factor', '0.0.2'
end

config/database.ymldevelopmentを以下のように修正。

config/database.yml
development:
  adapter: postgresql
  host: localhost
  encoding: utf8
  database: psgr_db
  username: postgres
  password: postgres
  pool: 5
  timeout: 5000

以下実行。

$ bundle update

こんなエラーが出たら、

An error occurred while installing pg (0.15.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.15.1'` succeeds before bundling.

ひとまずエラーのアドバイスに従って以下実行。

$ gem install pg -v '0.15.1'

もう一回bundle updateするとこんなエラーが出るので

Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.

/home/vagrant/.rvm/rubies/ruby-2.0.0-p598/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
--with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
...省略...

以下を実行。その後bundle updateしてもエラーは出なくなる。

$ sudo yum install postgresql-devel

その後以下を実行して、

$ sudo yum install postgresql-server

postgresユーザーのパスワードを変更して、

$ sudo passwd postgres

postgresユーザーに切り替えて

$ su postgres

データベースの初期化。

$ initdb -D /var/lib/pgsql/data

こんなのがバーっと出る。

could not change directory to "/home/vagrant/rails/railsTutorial/sample_app"
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale ja_JP.UTF-8.
The default database encoding has accordingly been set to UTF8.
initdb: could not find suitable text search configuration for locale ja_JP.UTF-8
The default text search configuration will be set to "simple".

fixing permissions on existing directory /var/lib/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in /var/lib/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

postgres -D /var/lib/pgsql/data
or
pg_ctl -D /var/lib/pgsql/data -l logfile start

下の方に書いてあるやつを実行。logfileつけたら怒られたので以下実行。

$ pg_ctl -D /var/lib/pgsql/data start

もとのユーザーに戻ってデータベースを作成してみる。

$ rake db:create RAILS_ENV=development

もう1回postgresユーザーに切り替えて出来てるか確認。
psgr_dbというconfig/database.ymlで指定したDBができてる。

$ su postgres
$ psql -l
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges  
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 psgr_db   | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
(4 rows)

適当にモデル作ってrake db:migrateやってrails consoleからデータを入れて、DBの中見てみたらちゃんとデータが入っていた。(idが2のデータがコンソールから入れたやつ)

$ su postgres
$ psql psgr_db postgres
$ select * from static_pages;
 id | name  | age |         created_at         |         updated_at         
----+-------+-----+----------------------------+----------------------------
  1 | test  |  20 |                            | 
  2 | test2 |  30 | 2015-01-05 15:27:37.290788 | 2015-01-05 15:27:37.290788
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした