3

I'm following the Michael Hartl Ruby on Rails Tutorial & there is a part where he is he he instructs you to update your Gemfile to include:

group :production do
  gem 'pg', '0.12.2'
end

And then enter the below commands in your terminal:

bundle update
bundle install --without production

When you run the bundle update command it throws back the below errors.

sample_app:$ bundle update
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.0.3) 
Using i18n (0.6.4) 
etc
[omitted lines for brevity]
etc
Using railties (3.2.12) 
Using coffee-rails (3.2.2) 
Installing diff-lcs (1.1.3) 
Using jquery-rails (2.0.2) 
Installing pg (0.12.2) 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /home/ross/.rvm/rubies/ruby-1.9.3-p392/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.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    etc
    [omitted lines for brevity]
    etc       



Gem files will remain installed in /home/ross/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.12.2 for inspection.
Results logged to /home/ross/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.12.2/ext/gem_make.out

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

I was able to overcome this error easily be removing the 'pg', '0.12.2' gem from the Gemfile & replacing it after running the bundle update command. This seems to work fine as the 'pg', '0.12.2' gem is aslo omitted in the without production flag in the latter bundle install --without production.

The 'pg', '0.12.2' gem is only needed for deploying to heroku with the correct database & everything works fine even when I deployed it to heroku but I'm just wondering if this is an error in the Tutorial or am I missing something bigger here?

It's also annoying to have to remove this Gem everytime I run bundle update, is bundle update really that necessary?

Thanks in Advance

Holly
  • 7,462
  • 23
  • 86
  • 140

2 Answers2

5

I'm following the same tutorial and I think it's redundant to run update without modifying existing dependency, but in this case it's even causing problems because update command has not --without argument.

I stumbled upon Rails 3 cheatsheet which mentions bundler workflow this way:

After adding or removing dependencies from Gemfile

  1. $ bundle
  2. Commit Gemfile and Gemfile.lock

After modifying existing dependency versions

  1. $ bundle update
  2. Commit Gemfile and Gemfile.lock

rails3 cheatsheet: bundler workflow


I read man pages for bundle update and tried RECOMMENDED WORKFLOW which consists of running bundle update after bundle install.

In my case (some output omitted):

$ bundle install --without production
Resolving dependencies...
Using rake (10.0.3)
...
Installing rspec-core (2.11.1)
Your bundle is complete!
Gems in the group production were not installed.             <-- check  


$ bundle update
Resolving dependencies...
Using rake (10.0.3) 
...
Using uglifier (1.2.3) 
Your bundle is updated!
Gems in the group production were not installed.             <-- check

I tried it with new RVM gem set and everything was installed correctly.

After that Gemfile.lock contains pg (0.12.2) and deploying to Heroku works.

RECOMMENDED WORKFLOW

In general, when working with an application managed with bundler, you should use the following workflow:

After you create your Gemfile for the first time, run

$ bundle install

Check the resulting Gemfile.lock into version control

$ git add Gemfile.lock

When checking out this repository on another development machine, run

$ bundle install

When checking out this repository on a deployment machine, run

$ bundle install --deployment

After changing the Gemfile to reflect a new or update dependency, run

$ bundle install

Make sure to check the updated Gemfile.lock into version control

$ git add Gemfile.lock

If bundle install reports a conflict, manually update the specific gems that you changed in the Gemfile

$ bundle update rails thin

If you want to update all the gems to the latest possible versions that still match the gems listed in the Gemfile, run

$ bundle update

A.D.
  • 4,487
  • 3
  • 38
  • 50
  • If you're following Hartl's GemFile exactly, running `bundle install --without production` initially will fail because of a lock. But then `bundle update` will succeed because it remembers the `--without production`. – countunique Jun 19 '13 at 23:55
1

Installation of postgres fails with this error : "Can't find the 'libpq-fe.h header"

Looks like a lot of people faced this problem, good news is : stackoverflow has the answer ;)

Can't find the 'libpq-fe.h header when trying to install pg gem

(or at least it should help you to look in the right direction)

Community
  • 1
  • 1
vdaubry
  • 11,369
  • 7
  • 54
  • 76