19

I am trying to bundle install, but, for some strange reason, the pg gem is returning the following error on install:

$ 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

Can anyone please help me install this gem and make my bundle finish successfully?

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
gespinha
  • 7,968
  • 16
  • 57
  • 91
  • 1
    Googling for the error message (good first step for anything like this), ie for *"Can't find the 'libpq-fe.h header"* reveals lots of questions on SO for this, eg http://stackoverflow.com/questions/6040583/cant-find-the-libpq-fe-h-header-when-trying-to-install-pg-gem – Max Williams Dec 21 '15 at 16:11
  • 2
    first rub `bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/(YOUR POSTGRES VERSION)/bin/pg_config` then `bundle install ` – Awlad Liton Dec 21 '15 at 16:11
  • Thanks @AwladLiton that worked :) – gespinha Dec 21 '15 at 16:20

3 Answers3

37

You should probably install the PostgreSQL development libraries.

If you're on Ubuntu this will help:

sudo apt-get install libpq-dev

On a Mac:

brew install postgresql
the Tin Man
  • 158,662
  • 42
  • 215
  • 303
azazeal
  • 646
  • 7
  • 12
10

You need to configure pg correctly.

Run:

bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/(YOUR POSTGRES VERSION)/bin/pg_config

Then try to run bundle:

bundle install
the Tin Man
  • 158,662
  • 42
  • 215
  • 303
Awlad Liton
  • 9,366
  • 2
  • 27
  • 53
1

If the PostgreSQL client library is installed, then you need to tell gem where to look for the include files, which it does by asking pg_config. I use a little shell file to make it easier for gem to find that utility:

#!/bin/sh -x

PATH=/Library/PostgreSQL/9.4/bin:$PATH
gem install pg $@

You could also manually adjust your PATH to always include the PostgreSQL bin directory, which should fix the problem permanently.

If you upgrade your PostgreSQL that path will change, so you might need to reinstall pg and/or change your PATH setting.

Once pg is installed, further upgrades to the gem will be able to install without rerunning the script.

the Tin Man
  • 158,662
  • 42
  • 215
  • 303