Hello!

I'm really enjoying ruby; the gem framework is absolutely amazing.

When I was trying to use multiple versions of Ruby on the same system, I ran across this one confusing aspect: the executables for gems didn't have the same naming convention as the "ruby" and "irb" executables.

So I filed bug 1728[1] and Eric Hodel was kind enough to point me to this mailing list.

It seems that "gem --format-executable" should default to "true" because the binaries created have the name of the "ruby" executable embedded in them (in the #! at the top).
Here are two use cases to help illustrate:
----use case 1-----------------------
I install ruby 1.8.

I use "./configure" when compiling it.
The binaries are in /usr/bin/ and do not have a suffix.

I decide I want to work on ruby 1.9.1 as well.
I use "./configure --program-suffix=19" when compiling it.
The binaries are also in /usr/bin but all end with "19", such as "/usr/ bin/ruby19".

Lets say I ZenTest for 1.8:
$ gem install ZenTest

This creates /usr/bin/autotest. This executable is intimately tied to ruby 1.8; it begins with "#!/usr/bin/ruby -ws" -- it cannot be used for ruby 1.9 (yet) because the libraries are not installed in ruby 1.9 and the executable it points to is the 1.8 executable.

Now lets say I want to install autotest for ruby 1.9:
$ gem19 install ZenTest

By default, no new binaries are created since they already exists.

The executable /usr/bin/autotest is *still* tied to ruby 1.8.

This causes confusion by the user; they just installed autotest for ruby 1.9 but it still is running ruby 1.8.
-----------------------------------

----use case 2-----------------------
My system administrator installs ruby 1.8 using "./configure" with no arguments. My system administrator installs ruby 1.9.1 using "./configure -- program-suffix=19"

I (a non-system-administrator) wants to install ZenTest for both:
$ gem install ZenTest
[output showing it is installed to ~/.gem]
$ gem19 install ZenTest
[output showing it is installed to ~/.gem]

So now I have two "autotest" binaries:
~/.gem/ruby/1.8/bin/autotest
and
~/.gem/ruby/1.9.1/bin/autotest

If my PATH includes both, then which "autotest" I get depends on my PATH order. The only way I can distinguish between the two executables is by changing my PATH on the fly. Not very useful if I want to be able to easily switch between both versions to verify it works in both versions of Ruby.
-----------------------------------

As you can see it can be rather confusing for "--format-executable" not to be the default.

It was doubly confusing for me because everything else worked so well. :-)

Ciao!

[1] http://redmine.ruby-lang.org/issues/show/1728
_______________________________________________
Rubygems-developers mailing list
http://rubyforge.org/projects/rubygems
[email protected]
http://rubyforge.org/mailman/listinfo/rubygems-developers

Reply via email to