The Ruby World Domination Plan
Ben Shakal
ben at nutsonline.com
Fri Dec 25 00:07:17 UTC 2009
On Dec 24, 2009, at 4:02 , Jeroen van Meeuwen wrote:
> # gem install facter
>
> installs facter to /usr/local/share/ruby/gems/facter-<version>, along
> with the facter.gemspec in /usr/local/share/ruby/specifications/ and so
> forth, but facter itself won't work.
I mentioned this in an off-list message to Jeroen (just joined the list now, hello everyone!), but I think the issue comes down to the fact that gem_prelude.rb's implementation of Gem.default_dir doesn't match the implementation in lib/rubygems/defaults.rb. (The latter is the full rubygems 1.3.1 version that ships within ruby 1.9.1.) To me it looks like an upstream bug; I can't imagine why they should be implemented so differently. With default MRI paths, they both return (approximately?) the same results, but with this new structure they don't match. In particular, gem_prelude's version returns a nonsensical path.
You can compare the two versions by simply doing this, in a fresh irb instance:
# the gem_prelude.rb version
>> Gem.default_dir
=> "/usr/lib64/ruby-1.9.1/gems"
# trigger method_missing to swap in the full/real rubygems
>> Gem.asdf
NoMethodError: undefined method `asdf' for Gem:Module
from <internal:gem_prelude>:341:in `method_missing'
from (irb):2
from /usr/bin/irb-1.9.1:12:in `<main>'
# the lib/rubygems/defaults.rb version
>> Gem.default_dir
=> "/usr/local/share/ruby/"
I believe the noisy strace you are seeing is simply ruby's usual Kernel.require process of searching the whole load path. When I modified gem_prelude.rb so that its default_dir agreed with rubygems', suddenly everything else started working too. E.g. "require 'facter'" works for me now, in a fresh irb instance.
I piggybacked my change onto the patch you've already included in your RPM, since you were already tweaking gem_prelude.rb. Patch-to-your-patch attached (same one I emailed directly earlier).
Like I said before though, I think there's an upstream bug here too... why do the default_dir methods work so differently?
-Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ruby-1.9.1-p243-mmt-searchpath.patch.patch
Type: application/octet-stream
Size: 644 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/ruby-sig/attachments/20091224/315167e7/attachment.obj
-------------- next part --------------
More information about the ruby-sig
mailing list