RailsでPostgreSQLを使えるようにする(Cent OS 6)
RailsでPostgreSQLを利用しようと思ったら結構めんどくさかったので備忘録。
【環境】 Cent OS 6 Rails 5.0.0.1
まずはpgのgemをインストールするためにGemfileを編集します。
[Gemfile]
・・・略 # gem 'sqlite3' gem 'pg', '~> 0.19.0' ・・・略
そしてbundlerでインストール。
$ bundle install
すると以下のようにエラーが。。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pg-0.19.0/ext /opt/rbenv/versions/2.3.1/bin/ruby -r ./siteconf20161116-14801-1v9o109.rb 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. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/rbenv/versions/2.3.1/bin/$(RUBY_BASE_NAME) --with-pg --without-pg --enable-windows-cross --disable-windows-cross --with-pg-config --without-pg-config --with-pg_config --without-pg_config --with-pg-dir --without-pg-dir --with-pg-include --without-pg-include=${pg-dir}/include --with-pg-lib --without-pg-lib=${pg-dir}/lib To see why this extension failed to compile, please check the mkmf.log which can be found here: /opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0-static/pg-0.19.0/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pg-0.19.0 for inspection. Results logged to /opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0-static/pg-0.19.0/gem_make.out An error occurred while installing pg (0.19.0), and Bundler cannot continue. Make sure that `gem install pg -v '0.19.0'` succeeds before bundling. 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
調べてみたところPostgreSQL関連のパッケージが足りないらしい。なんてこった。
# yum -y install postgresql-devel # yum -y install postgresql-server
で必要そうなパッケージをインストールしてみましたが、、、
$ rails db:create Your version of PostgreSQL (80420) is too old. Active Record supports PostgreSQL >= 9.1. Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"TravelMaker_development"} rails aborted! Your version of PostgreSQL (80420) is too old. Active Record supports PostgreSQL >= 9.1. bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)
どうやらPostgreSQLのバージョンがtoo old。ActiveRecordが対応していないとのこと。 ということで最新のPostgreSQL 9.6をインストールするために、ここからRPMパッケージを個別に追加。
# yum -y localinstall https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
以下を実行して改めて必要なパッケージ類をインストール。
# yum -y install postgresql96-devel # yum -y install postgresql96-server
参考:http://lets.postgresql.jp/documents/tutorial/yum/yum
PostgreSQLのサービスを起動。
# service postgresql-9.6 initdb # service postgresql-9.6 start
もう一度bundle installして無事成功!
次にRailsプロジェクトのdatabase.ymlを変更します。
$ rails new <プロジェクト名> -d postgresql
とかを実行すると、PostgreSQL用のデフォルトのdatabase.ymlが<プロジェクト名>/config/database.ymlに出来上がるので、 それをコピペしてきて環境に合わせて編集します。
編集できたらデータベースを作成し、マイグレーションしておきます。
$ rails db:create $ rails db:migrate
無事マイグレーション成功です。