Các vấn đề gặp phải khi lần đầu sử dụng gem 'pg' với Rails trên CentOS

Trước giờ vẫn hay thao tác chủ yếu với MySQL là chủ yếu, lần đầu cài đặt Rails Project với Postgres đã gặp những vấn để nho nhỏ sau.

Cài project Rails với Postgresql lên CentOS thi thoảng gặp những vấn đề nhất định

  • Các yêu cầu cài đặt trước

    • CentOS
    • Ruby Environment
    • Postgresql latest(starting)
  • Cài đủ các thư viện cần thiết

yum install postgresql-devel postgresql-libs

Problem1: bundle install thất bại

Error Output:

$ gem install pg -v '0.18.4'

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

    /Users/username/.rvm/rubies/ruby-2.2.1/bin/ruby -r ./siteconf20151221-23315-1tkv3fd.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
    --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=/Users/username/.rvm/rubies/ruby-2.2.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

extconf failed, exit code 1

Gem files will remain installed in /Users/username/.rvm/gems/ruby-2.2.1/gems/pg-0.18.4 for inspection.
Results logged to /Users/username/.rvm/gems/ruby-2.2.1/extensions/x86_64-darwin-15/2.2.0/pg-0.18.4/gem_make.out

Nguyên nhân: Do không tìm thấy đúng file config của postgresql để cài đặt gem

Giải pháp

Chỉnh lại pg_config path cho đúng

bundle config build.pg --with-pg-config=/usr/local/pgsql-9.4/bin/pg_config

bundle install

rake db:create gặp lỗi permisson create database

error output:

psql: FATAL: role "user" does not exist 

Nguyên nhân: như clear message, role user chưa tồn tại

Giải pháp

Tạo role user cho postgres

sudo -u postgres createuser user

rake db:create gặp lỗi permission với Postgres

Error Output

PG::InsufficientPrivilege: ERROR:  permission denied to create database
: CREATE DATABASE "myapp_development" ENCODING = 'unicode'
.... (lots of tracing)
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"myapp_development", "username"=>"user", "password"=>nil}
myapp_test already exists

Nguyên nhân: Do role user không có permission user để createDB

Giải pháp

$ sudo -u postgres -i

postgres@host:~$ psql

Sau khi login vào Postgres:

postgres=# ALTER USER user CREATEDB;
Written on August 3, 2017