Project

General

Profile

Actions

Bug #5060

closed

Executables in bin folder conflict with their gem versions.

Added by vo.x (Vit Ondruch) over 12 years ago. Updated over 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
1.9.3
Backport:
[ruby-core:38257]

Description

It would be nice if the executables for rdoc, rake, ri, etc. locate in bin folder, would be standard RubyGems stubs. Otherwise, once there is installed version of such library as a gem, the original file is rewritten and the functionality of bundled library is lost.

But my main concern is the conflict between ruby and gem executables, since it makes packaging for Linux distributions hard (for Fedora and RHEL in my case).


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #4485: Gem.bin_path('rake') does not return the path of the system-installed rakeCloseddrbrain (Eric Hodel)03/09/2011Actions

Updated by naruse (Yui NARUSE) over 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to drbrain (Eric Hodel)
  • Target version set to 2.0.0

Updated by drbrain (Eric Hodel) over 12 years ago

  • Status changed from Assigned to Closed

Since I committed r32608 and r32611 I think this issue is now invalid.

If a different version of rake or rdoc are installed they will behave the same as the bundled library. rake 0.9.2.1 will load the built-in version of rake, for example. If a newer version of RDoc were installed rdoc and ri would behave the same.

I'm closing this ticket unless differing behavior can be reproduced.

Updated by vo.x (Vit Ondruch) almost 12 years ago

  • Status changed from Closed to Assigned

Sorry, I'm reopening, but the issue is still present.

When you install Ruby, it carries initial version of /usr/bin/rdoc [1] (I picked up the RDoc as an example, but it is valid also for Rake, etc). Now let's assume that you will install updated RDoc, which replaces the file with the typical RubyGems stub, something like:

$ cat /usr/bin/rdoc
#!/usr/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'rdoc' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'rdoc', version
load Gem.bin_path('rdoc', 'rdoc', version)

Now, this is problem for packaging systems, namely RPM (but I would be surprised if that is not issue for DEB as well). If you will do monolithic Ruby package, which provides /usr/bin/rdoc and later you want to package independent updated version of RDoc gem, which provides /usr/bin/rdoc as well, you are in conflict, since the files are different. If they would be the same (and there is no reason to be different IMO), there would be no conflict. The file would be own by two packages in parallel, which is supported scenario.

So what I'd like to see is the RubyGems stub in /usr/bin, especially after you committed r32608.

Actually, I'm trying to put together some proposal to solve #5481 and #6124, which might fix also this issue.

Thank you.

[1] https://github.com/ruby/ruby/blob/trunk/bin/rdoc

Updated by drbrain (Eric Hodel) about 11 years ago

  • Target version changed from 2.0.0 to 2.6

This is too risky to fix for 2.0.0, sorry I did not have time.

Updated by salimane (Salimane Adjao Moustapha) over 10 years ago

drbrain (Eric Hodel) wrote:

This is too risky to fix for 2.0.0, sorry I did not have time.
I would like to know when this issue can be solved and pushed into trunk at least :)
Thanks

Updated by mame (Yusuke Endoh) over 6 years ago

  • Assignee changed from drbrain (Eric Hodel) to hsbt (Hiroshi SHIBATA)

@hsbt-san, I might be wrong but has this issue been solved by default/bundled gems?

Updated by vo.x (Vit Ondruch) over 6 years ago

No, this is still not resolved (testing with r61169). Only Rake (which is "bundled" gem) appears to have RubyGems generated stub which won't conflict unless RubyGems change the algorithm. The remaining executables (namely bundle, bundler, rdoc) are conflicting.

Updated by hsbt (Hiroshi SHIBATA) over 6 years ago

I understood this issue. I try to resolve current specification at Ruby 2.6.

Actions #9

Updated by naruse (Yui NARUSE) over 6 years ago

  • Target version deleted (2.6)

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago

I created a patch for fixing this.

https://github.com/ruby/ruby/pull/2023

@nobu (Nobuyoshi Nakada) Can you review the above patch?

Actions #11

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago

  • Status changed from Assigned to Closed

Applied in changeset trunk|r65963.


Use stub executables generated by RubyGems istead of original executables.
It resolved the conflict issues when invoking gem i rdoc and the binstub
issues with Bundler and Rails.

[Bug #5060][ruby-core:38257][Fix GH-2023]

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0