Bundler.require does not work for ActiveRecord in my gem

bundler, ruby, ruby-on-rails, rubygems

Solution

Firstly, if you're packaging a gem, do not use `Bundler.require`. `Bundler.require` is for apps not gems.

In `.gemspec`, specify the dependencies of your deployed gem.

In your `Gemfile`, include the line `gemspec` to automatically include the dependencies listed in your `.gemspec` in your `Gemfile`.

You may also optionally create gem groups for dev and test.

In your code, explicitly `require` any libraries you need.

I lost a couple of hours on this today so I hope this helps.

(Sources 1, 2)

Secondly, though the ActiveRecord gem is called "activerecord", the lib is called "active_record". This is what you would need in `Gemfile`.

gem 'activerecord', :require => "active_record"

Unless you include the `:require` option, ActiveRecord won't be loaded correctly and you won't know about it until you try to use it.

Problem

I just created a new gem (using bundler) and want to add Active Record support. So I added `s.add_dependency "activerecord", "~> 3.0"` to my gemspec. Then I use Bundler.setup and Bundler.require and thought that I have access to Active Record now, but I haven't. I have to explicitly use `require "active_record"`. Any idea why Bundler.require does not work for me in that case?

Original source