Date: Thu, 28 Jan 2010 21:50:40 -0700 From: Aaron Gifford <astounding@gmail.com> To: freebsd-ruby@freebsd.org Subject: Solved: Ruby Gem Require LoadError (8-STABLE, Ruby 1.9.1) Message-ID: <e58000751001282050n4c92c3b5pddfb549af1b75050@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
On Thu, Jan 28, 2010 at 7:25 PM, Aaron Gifford <astounding@gmail.com> wrote= : > =A0I wrote: >> One more interesting thing: >> >> % ruby19 -e 'p Gem.default_dir' >> "/usr/local/lib/ruby19/gems/1.9" >> >> That is NOT right. =A0It should be "/usr/local/lib/ruby/gems/1.9" instea= d. >> >> Where does Gem.default_dir get set, does anyone know? >> >> Aaron out. > > It looks like gem_prelude.rb sets up the gems include path. > > The relevant code section is: > > =A0def self.default_dir > =A0 =A0 =A0 =A0File.join File.dirname(ConfigMap[:sitedir]), 'Gems', > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ConfigMap[:ruby_version] > =A0 =A0 =A0elsif RUBY_VERSION > '1.9' then > =A0 =A0 =A0 =A0File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name= ], 'gems', > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ConfigMap[:ruby_version]) > =A0 =A0 =A0else > =A0 =A0 =A0 =A0File.join(ConfigMap[:libdir], ruby_engine, 'gems', > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ConfigMap[:ruby_version]) > =A0 =A0 =A0end > =A0 =A0end > > So the Gem.default_dir is being set to: > =A0File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name], 'gems', > ConfigMap[:ruby_version]) > > (that's the middle "RUBY_VERSION > '1.9'" code chunk) > > So ConfigMap[:ruby_install_name] is "ruby19" in this case, and THAT's > what is screwing this up. > > > > IDEAS: > > Either the FreeBSD Ruby 1.9 port needs to install things in > "/usr/local/lib/ruby19" instead of "/usr/local/lib/ruby/" so the code > will work as-is, or else something's gotta change with > ConfigMap[:ruby_install_name], or else gem_prelude.rb code has to be > changed... > > So... anyone with expertise, where does one go from here? > > Aaron out. It looks like ConfigMap[:ruby_install_name] gets set earlier in the same gem_prelude.rb code to RbConfig::CONFIG["ruby_install_name"] which in turn is set in rbconfig.rb which sets it to "ruby19". That file is autogenerated during the build process by the mkconfig.rb script which gets passed an "install_name" variable setting I'm assuming. That in turn gets set during make. The Makefile shows: $(RBCONFIG): $(srcdir)/mkconfig.rb config.status $(PREP) @$(MINIRUBY) $(srcdir)/mkconfig.rb -timestamp=3D$@ \ -install_name=3D$(RUBY_INSTALL_NAME) \ -so_name=3D$(RUBY_SO_NAME) rbconfig.rb So it's getting set to the RUBY_INSTALL_NAME value 'ruby19'. Of course Makefile is created from the Makefile.in template by the GNU Autoconf configure process. The configure.in template shows RUBY_INSTALL_NAME getting set to: RUBY_INSTALL_NAME=3D"${ri_prefix}ruby${ri_suffix}" That explains completely how Gem.default_dir is getting set to ""/usr/local/lib/ruby19/gems/1.9" instead of the actual path "/usr/local/lib/ruby/gems/1.9" ONE POSSIBLE FIX is this patch to gem_prelude.rb (in /usr/ports/lang/ruby19/files/patch-gem_prelude.rb): =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gem_prelude.rb.orig 2010-01-28 21:22:27.307910440 -0700 +++ gem_prelude.rb 2010-01-28 21:22:43.177946726 -0700 @@ -116,7 +116,7 @@ File.join File.dirname(ConfigMap[:sitedir]), 'Gems', ConfigMap[:ruby_version] elsif RUBY_VERSION > '1.9' then - File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name], 'gems= ', + File.join(ConfigMap[:libdir], 'ruby', 'gems', ConfigMap[:ruby_version]) else File.join(ConfigMap[:libdir], ruby_engine, 'gems', =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D This works. Building/installing gems under 1.9.1 (with RUBY_VERSION=3D1.9.1 in /etc/make.conf) did not break (still works), but this time, no LoadErrors during require. AT LAST! user@host:/home/user% irb19 irb(main):001:0> require 'net/ssh' =3D> true irb(main):002:0> And that makes ruby19 -e 'p Gem.default_dir' output "/usr/local/lib/ruby/gems/1.9" like it should. Aaron out.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?e58000751001282050n4c92c3b5pddfb549af1b75050>