ports/143337: Ruby 1.9.1 gems installed with RUBY_VERSION=1.9.1 set in make.conf fail to load with LoadError
Aaron Gifford
astounding at gmail.com
Fri Jan 29 05:20:10 UTC 2010
>Number: 143337
>Category: ports
>Synopsis: Ruby 1.9.1 gems installed with RUBY_VERSION=1.9.1 set in make.conf fail to load with LoadError
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Jan 29 05:20:10 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Aaron Gifford
>Release: FreeBSD 8.0-STABLE as of 27 Jan. 2010
>Organization:
>Environment:
FreeBSD host.example.com 8.0-STABLE FreeBSD 8.0-STABLE #0: Wed Jan 27 19:46:39 MST 2010 root at host.example.com:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
When using Ruby 1.9.1 as the default ruby version (by setting RUBY_VERSION=1.9.1 in /etc/make.conf), gems installed via the ports system OR installed directly with the gem command fail to load when required with a LoadError.
Please see the thread at http://forums.freebsd.org/showthread.php?t=10760 for example details. Also see the email thread in the freebsd-ruby at freebsd.org archives on 28 Jan. 2010.
The problem can be traced to a discrepancy in the default gem path. Call the Gem.default_dir method within Ruby 1.9.1 on a FreeBSD host with the ruby19 port installed, and you will see:
% ruby -e 'p Gem.default_dir'
"/usr/local/lib/ruby19/gems/1.9"
That is NOT right. It should be "/usr/local/lib/ruby/gems/1.9" instead. If you install one or more gems with the port system (by setting RUBY_VERSION=1.9.1 in /etc/make.conf so that ruby19 is the default ruby version), OR if you use the gem command to install directly from a .gem file, then look where the gems get installed, they are installed in "/usr/local/lib/ruby/gems/1.9" and NOT where the Gem.default_dir claims they are.
The problem can be fixed with a one-line patch that should work regardless if 1.9 is the default or not. (See patch in this PR submission.)
>How-To-Repeat:
Install Ruby 1.9.1 via the ports collection. If you don't want to make Ruby 1.9.1 your default Ruby installation, you can repeat the problem by downloading a pure ruby .gem file and installing it directly. For example:
user at host:/path# fetch http://www.aarongifford.com/computers/mtik/latest/mtik-3.0.1.gem
mtik-3.0.1.gem 100% of 17 kB 93 kBps
user at host:/path# gem19 install mtik-3.0.1.gem
Successfully installed mtik-3.0.1
1 gem installed
Installing ri documentation for mtik-3.0.1...
Updating class cache with 1372 classes...
Installing RDoc documentation for mtik-3.0.1...
user at host:/path# irb19
irb(main):001:0> require 'mtik'
LoadError: no such file to load -- mtik
from (irb):2:in `require'
from (irb):2
from /usr/local/bin/irb:12:in `<main>'
irb(main):002:0>
>Fix:
Patch the gem_prelude.rb file as follows:
==========
--- 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',
==========
Replace ConfigMap[:ruby_install_name] (value "ruby19") with the literal string 'ruby' and all is well.
This is one possible solution of several, probably the simplest.
Patch attached with submission follows:
--- 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',
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list