Fixing Bundler Issues After a macOS Sierra Upgrade

I recently upgraded my laptop, and with that came setting up a fresh dev machine. With a fresh install always comes with a set of development configuration problems. Here’s some tips of resolving ruby bundler issues in MacOS Sierra.

These tips assume you are using dotfiles that look similar to these. Also, I prefer fresh installs, so I never pull config from my old machine/OS. These fixes may not work if you are migrating configuration from a previous OS.

For any of the fixes outlined below:

  • Adjust the version strings based on your project
  • If you do not have bundler’s shared gems disabled, then you can omit the --install-dir directives.

An error occurred while installing pg (0.18.4), and Bundler cannot
continue.

gem install --install-dir vendor/bundle pg -v 0.18.4 -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.6/bin/pg_config

Alternatively, you can configure this setting with bundle config build.pg.

  • An error occurred while installing nokogiri (1.6.8), and Bundler cannot
    continue.
  • An error occurred while installing mysql2 (0.3.20), and Bundler cannot continue.
xcode-select --install

An error occurred while installing capybara-webkit (1.11.1), and
Bundler cannot continue.

brew install qt55
brew link --force qt55

Then, I needed to manually edit mkspecs/features/Mac/default_pre.prf. More details here.

error occurred while installing therubyracer (0.12.1), and Bundler cannot continue

gem install --install-dir vendor/bundle libv8 -- --with-system-v8
gem install --install-dir vendor/bundle therubyracer -v 0.12.1

rubygems/core_ext/kernel_require.rb:54:in `require’: cannot load such file — bundler/setup (LoadError)

This is caused by spring coupled with a new version of bundler. Regenerate your binstubs:

bundle exec spring binstub --all

Enter passphrase for /Users/USER/.ssh/id_rsa

If you copy your public + private key from your old machine/OS, and used a passphrase to secure it (which you should be doing!), you’ll need to run this command to avoid reentering your passphrase every time you use the key:

ssh-agent bash
ssh-add

# in some cases (capistrano deployment, for example) you'll need to do this:
ssh-add -K ~/.ssh/id_rsa

# Also, in some cases, this helped: edit ~/.ssh/config
Host *
  UseKeychain yes

An error occurred while installing eventmachine (1.0.4), and Bundler cannot continue.

Specifically, I got this build error:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

~/.rbenv/versions/2.1.6/bin/ruby extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no

creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:112:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1

make failed, exit code 2

Here’s the fix (inspired by this post) that fixed the issue:

gem install --install-dir vendor/bundle  eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include

/.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require’: cannot load such file — bundler/setup (LoadError)

This error was being caused by spring when attempting to run bundle exec rails console. You can verify that this is the case by omitting spring with export DISABLE_SPRING=true and seeing if rails console runs just fine.

To fix this issue, you need to update your binstubs:

bundle exec rake rails:update:bin