Forum: Ruby on Rails Troubles with using gems in Rails

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C25909d53e693206a9ec8cbf0631092e?d=identicon&s=25 Witold Rugowski (viciu)
on 2007-04-23 02:31
Hi!

I'm observing some problems using gem inside Rails. My understanding is
that after following sequence in irb:

$ irb
irb(main):001:0>  require 'rubygems'
=> true
irb(main):002:0> require 'active_record'
=> true
irb(main):003:0> gem 'acts_as_taggable'
=> true

I should have access to acts_as_tagable mixins, like:

irb(main):005:0> ActiveRecord::Acts::Taggable
NameError: uninitialized constant ActiveRecord::Acts::Taggable
        from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:263:in
`load_missing_constant'
        from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:452:in
`const_missing'
        from (irb):5

Well it looks like I don't have access. I have to include file from gem
manually:

irb(main):013:0> require
'/usr/local/lib/ruby/gems/1.8/gems/acts_as_taggable-2.0.2/lib/taggable.rb'
=> []
irb(main):014:0> ActiveRecord::Acts::Taggable
=> ActiveRecord::Acts::Taggable


What I'm doing wrong? My environment:

$ ruby --version
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-freebsd6]
$ gem list rubygems-update
rubygems-update (0.9.2)


Best regards,


--
Witold Rugowski
http://nhw.pl/wp/ (EN blog)
http://nhw.pl/pl/ (PL blog)
971708ecf1c0b3cada6cf98ea58611fd?d=identicon&s=25 Val (Guest)
on 2007-04-23 03:31
(Received via mailing list)
Witold,

That is an enhancement of the latest rubygems. The 'gem' method does
not trigger auto-require as 'require_gem' used to. The
'acts_as_taggable' gem has autorequire set to 'taggable', which
activates all that stuff you expect. But since it is not called when
you use 'gem', you need to require 'taggable' explicitly after that.
Notice, that there is no need to specify the full path in require.

Hope it helps,
Val

$ irb -rrubygems
>> gem 'acts_as_taggable'
=> true
>> require 'taggable'
=> true
>> ActiveRecord::Acts::Taggable
=> ActiveRecord::Acts::Taggable


On Apr 22, 8:31 pm, Witold Rugowski <rails-mailing-l...@andreas-s.net>
C25909d53e693206a9ec8cbf0631092e?d=identicon&s=25 Witold Rugowski (viciu)
on 2007-04-23 13:58
Val wrote:
> That is an enhancement of the latest rubygems. The 'gem' method does
> not trigger auto-require as 'require_gem' used to. The
> 'acts_as_taggable' gem has autorequire set to 'taggable', which
> activates all that stuff you expect. But since it is not called when
> you use 'gem', you need to require 'taggable' explicitly after that.

Thank You for clarifications.

Is there some way to enable old behavior? Well, I see this as something
lowering code readability. Thanks to disabled auto require feature I
need to execute two commands, and require often would need different
name for include (like in this example: acts_as_taggable and taggable)

--
Witold Rugowski
http://nhw.pl/wp/ (EN blog)
http://nhw.pl/pl/ (PL blog)
428f96cc689eb7419bba3a8bbfcc222a?d=identicon&s=25 Stefan Mahlitz (Guest)
on 2007-04-23 20:46
(Received via mailing list)
Witold Rugowski wrote:
> lowering code readability. Thanks to disabled auto require feature I
> need to execute two commands, and require often would need different
> name for include (like in this example: acts_as_taggable and taggable)

gem "somegem" is - if I understand correctly - only needed if you need a
 special version

require "somegem" will require the latest "somegem"

irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "trollop"
=> true
irb(main):003:0> Trollop::VERSION
=> "1.6"

---

irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> gem "trollop", "1.4"
=> true
irb(main):003:0> require "trollop"
=> true
irb(main):004:0> Trollop::VERSION
=> "1.4"
This topic is locked and can not be replied to.