Odd requirement behavior between two environments

I'm setting up a Ruby project on a new development machine and have run into
some trouble getting my unit tests to run. Can any one suggest what the
vital difference between these two machines might be, or what is causing the
error?

Esentially, my problem is that even though I have installed the ActiveRecord
gem, I am unable to use it in a script.

Old development machine where everything works:
    Ruby 1.8.4
    Gems 0.8.11
    ActiveRecord gem installed 1.15.2
    
Results of IRB session on the old development machine

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require_gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord
=> ActiveRecord

Ok, so that looks good. I can require the gem & then IRB knows what
ActiveRecord is. Great.

New development machine where this doesn't work
    Ruby 1.8.6
    Gems 0.9.4
    ActiveRecord gem installed 1.15.3
    
Results of IRB session on the new development machine

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord
NameError: uninitialized constant ActiveRecord
        from (irb):3

So, something is up. In line 2 I'm using the command newer command 'gem'
instead of the depreciated 'require_gem'. But I get the same result even if
I use the depreciated command.

Any ideas? Something I forgot to install on this new machine? Or some weird
configuration change I made on the old machine that I didn't copy over.

Thanks for any advice,

Ian

require_gem / gem are not the same as require. They're meant for
locking gems to specific versions or making sure they exist, not
loading libraries, e.g.

gem "ruport", "=1.0.1"

Also, with that in mind note that gem names don't always coincide with
library names, so you actually will need to do this:

require "rubygems"
require "active_record"

In earlier versions of RubyGems, it was possible for the require_gem
command to autoload libraries, this is no longer the case.

Hope that helps...

-greg

···

On 7/16/07, Ian Whitney <iwhitney@ssa-i.org> wrote:

Ok, so that looks good. I can require the gem & then IRB knows what
ActiveRecord is. Great.

New development machine where this doesn't work
    Ruby 1.8.6
    Gems 0.9.4
    ActiveRecord gem installed 1.15.3

Results of IRB session on the new development machine

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord
NameError: uninitialized constant ActiveRecord
        from (irb):3

So, something is up. In line 2 I'm using the command newer command 'gem'
instead of the depreciated 'require_gem'. But I get the same result even if
I use the depreciated command.

Any ideas? Something I forgot to install on this new machine? Or some weird
configuration change I made on the old machine that I didn't copy over.

"gem" doesn't perform an implicit require; it simply modifies $: to
include the path to the gem.

irb(main):001:0> old = $:.dup
=> ["/usr/lib/ruby/site_ruby/1.8",
"/usr/lib/ruby/site_ruby/1.8/i686-linux", "/usr/lib/ruby/site_ruby",
"/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i686-linux", "."]
irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> gem 'activerecord'
=> true
irb(main):004:0> $: - old
=> ["/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.2/bin",
"/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib",
"/usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/bin",
"/usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib"]
irb(main):005:0> require 'activerecord'
LoadError: no such file to load -- activerecord
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
        from (irb):5
irb(main):006:0> require 'active_record' #sheesh
=> true
irb(main):007:0> ActiveRecord
=> ActiveRecord

martin

···

On 7/17/07, Ian Whitney <iwhitney@ssa-i.org> wrote:

New development machine where this doesn't work
    Ruby 1.8.6
    Gems 0.9.4
    ActiveRecord gem installed 1.15.3

Results of IRB session on the new development machine

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord
NameError: uninitialized constant ActiveRecord
        from (irb):3

Thank you, that seems to have moved me forward.

Ian

···

On 7/16/07 2:05 PM, "Gregory Brown" <gregory.t.brown@gmail.com> wrote:

On 7/16/07, Ian Whitney <iwhitney@ssa-i.org> wrote:

Ok, so that looks good. I can require the gem & then IRB knows what
ActiveRecord is. Great.

New development machine where this doesn't work
    Ruby 1.8.6
    Gems 0.9.4
    ActiveRecord gem installed 1.15.3

Results of IRB session on the new development machine

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> gem 'activerecord'
=> true
irb(main):003:0> ActiveRecord
NameError: uninitialized constant ActiveRecord
        from (irb):3

So, something is up. In line 2 I'm using the command newer command 'gem'
instead of the depreciated 'require_gem'. But I get the same result even if
I use the depreciated command.

Any ideas? Something I forgot to install on this new machine? Or some weird
configuration change I made on the old machine that I didn't copy over.

require_gem / gem are not the same as require. They're meant for
locking gems to specific versions or making sure they exist, not
loading libraries, e.g.

gem "ruport", "=1.0.1"

Also, with that in mind note that gem names don't always coincide with
library names, so you actually will need to do this:

require "rubygems"
require "active_record"

In earlier versions of RubyGems, it was possible for the require_gem
command to autoload libraries, this is no longer the case.

Hope that helps...

-greg