Bug 2229153 - Lots of "already initialized constant" messages issued when rubygem-irb is used in scripts
Summary: Lots of "already initialized constant" messages issued when rubygem-irb is us...
Keywords:
Status: NEW
Alias: None
Product: Red Hat Enterprise Linux 9
Classification: Red Hat
Component: ruby
Version: 9.2
Hardware: All
OS: Linux
low
low
Target Milestone: rc
: ---
Assignee: ruby maint
QA Contact: RHEL CS Apps Subsystem QE
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2023-08-04 13:05 UTC by Carlos Santos
Modified: 2023-08-04 13:07 UTC (History)
0 users

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed:
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker RHELPLAN-164560 0 None None None 2023-08-04 13:05:56 UTC

Description Carlos Santos 2023-08-04 13:05:17 UTC
Description of problem:

Messages like this are issued when a ruby script uses "require 'irb'":

/usr/share/ruby/irb/ruby-lex.rb:123: warning: already initialized constant RubyLex::ERROR_TOKENS
/usr/share/gems/gems/irb-1.3.5/lib/irb/ruby-lex.rb:123: warning: previous definition of ERROR_TOKENS was here

Version-Release number of selected component (if applicable):

RHEL 9.2
rubygem-irb-1.3.5-160.el9_0.noarch

How reproducible:

Always

Steps to Reproduce:

1. Install rubygem-irb

   # yum install rubygem-irb

2. Invoke irb via binding.irb

   $ ruby -e binding.irb

Actual results:

/usr/share/ruby/irb/ruby-lex.rb:123: warning: already initialized constant RubyLex::ERROR_TOKENS
/usr/share/gems/gems/irb-1.3.5/lib/irb/ruby-lex.rb:123: warning: previous definition of ERROR_TOKENS was here
/usr/share/ruby/irb/color.rb:8: warning: already initialized constant IRB::Color::CLEAR
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:8: warning: previous definition of CLEAR was here
/usr/share/ruby/irb/color.rb:9: warning: already initialized constant IRB::Color::BOLD
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:9: warning: previous definition of BOLD was here
/usr/share/ruby/irb/color.rb:10: warning: already initialized constant IRB::Color::UNDERLINE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:10: warning: previous definition of UNDERLINE was here
/usr/share/ruby/irb/color.rb:11: warning: already initialized constant IRB::Color::REVERSE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:11: warning: previous definition of REVERSE was here
/usr/share/ruby/irb/color.rb:12: warning: already initialized constant IRB::Color::RED
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:12: warning: previous definition of RED was here
/usr/share/ruby/irb/color.rb:13: warning: already initialized constant IRB::Color::GREEN
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:13: warning: previous definition of GREEN was here
/usr/share/ruby/irb/color.rb:14: warning: already initialized constant IRB::Color::YELLOW
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:14: warning: previous definition of YELLOW was here
/usr/share/ruby/irb/color.rb:15: warning: already initialized constant IRB::Color::BLUE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:15: warning: previous definition of BLUE was here
/usr/share/ruby/irb/color.rb:16: warning: already initialized constant IRB::Color::MAGENTA
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:16: warning: previous definition of MAGENTA was here
/usr/share/ruby/irb/color.rb:17: warning: already initialized constant IRB::Color::CYAN
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:17: warning: previous definition of CYAN was here
/usr/share/ruby/irb/color.rb:19: warning: already initialized constant IRB::Color::TOKEN_KEYWORDS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:19: warning: previous definition of TOKEN_KEYWORDS was here
/usr/share/ruby/irb/color.rb:26: warning: already initialized constant IRB::Color::ALL
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:26: warning: previous definition of ALL was here
/usr/share/ruby/irb/color.rb:32: warning: already initialized constant IRB::Color::TOKEN_SEQ_EXPRS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:32: warning: previous definition of TOKEN_SEQ_EXPRS was here
/usr/share/ruby/irb/color.rb:75: warning: already initialized constant IRB::Color::ERROR_TOKENS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:75: warning: previous definition of ERROR_TOKENS was here
irb(main):001:0> 

Expected results:

No warning

Additional info:

The warnings appear because rubygThe messages appear because of the way ruby searches for libraries when
"-r <library>" is passed. It looks at

    $ ruby -e 'puts $:'
    /usr/local/share/ruby/site_ruby
    /usr/local/lib64/ruby/site_ruby
    /usr/share/ruby/vendor_ruby
    /usr/lib64/ruby/vendor_ruby
    /usr/share/rubygems
    /usr/share/ruby
    /usr/lib64/ruby

So it looks at /usr/share/ruby/, where the rubygem-irb package installs
symbolic links to the files under /usr/share/gems/gems:

    $ file  /usr/share/ruby/irb*
    /usr/share/ruby/irb:    symbolic link to /usr/share/gems/gems/irb-1.3.5/lib/irb
    /usr/share/ruby/irb.rb: symbolic link to /usr/share/gems/gems/irb-1.3.5/lib/irb.rb

But rubygem-irb adds a gemspec at /usr/share/gems/specifications/, so irb
(and therefore color.rb) ends up loaded twice.

In order to avoid this, you'd need to "load" irb, instead of "require" it as
/usr/bin/irb does. Something like this:

    $ ruby -r rubygems -e "load Gem.activate_bin_path('irb', 'irb', '>= 0.a')"

But this does not solve the problem with existing gems, e.g.

# yum install ruby-devel
# gem install rest-client -v 2.1.0
Building native extensions. This could take a while...
Successfully installed unf_ext-0.0.8.2
Fetching unf-0.1.4.gem
Successfully installed unf-0.1.4
Fetching domain_name-0.5.20190701.gem
Successfully installed domain_name-0.5.20190701
Fetching http-cookie-1.0.5.gem
Successfully installed http-cookie-1.0.5
Fetching http-accept-1.7.0.gem
Successfully installed http-accept-1.7.0
Fetching rest-client-2.1.0.gem
Successfully installed rest-client-2.1.0
Parsing documentation for unf_ext-0.0.8.2
Installing ri documentation for unf_ext-0.0.8.2
Parsing documentation for unf-0.1.4
Installing ri documentation for unf-0.1.4
Parsing documentation for domain_name-0.5.20190701
Installing ri documentation for domain_name-0.5.20190701
Parsing documentation for http-cookie-1.0.5
Installing ri documentation for http-cookie-1.0.5
Parsing documentation for http-accept-1.7.0
unknown encoding name "header" for lib/http/accept.rb, skipping
Installing ri documentation for http-accept-1.7.0
Parsing documentation for rest-client-2.1.0
Installing ri documentation for rest-client-2.1.0
Done installing documentation for unf_ext, unf, domain_name, http-cookie, http-accept, rest-client after 2 seconds
6 gems installed

$ which restclient
/usr/local/bin/restclient
[bashuser@rhel-9-1 ~]$ restclient
/usr/local/share/gems/gems/rest-client-2.1.0/bin/restclient:64: warning: redefining Object#method_missing may cause infinite loop
/usr/share/ruby/irb/ruby-lex.rb:123: warning: already initialized constant RubyLex::ERROR_TOKENS
/usr/share/gems/gems/irb-1.3.5/lib/irb/ruby-lex.rb:123: warning: previous definition of ERROR_TOKENS was here
/usr/share/ruby/irb/completion.rb:18: warning: already initialized constant IRB::InputCompletor::ReservedWords
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:18: warning: previous definition of ReservedWords was here
/usr/share/ruby/irb/completion.rb:39: warning: already initialized constant IRB::InputCompletor::BASIC_WORD_BREAK_CHARACTERS
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:39: warning: previous definition of BASIC_WORD_BREAK_CHARACTERS was here
/usr/share/ruby/irb/completion.rb:59: warning: already initialized constant IRB::InputCompletor::CompletionRequireProc
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:59: warning: previous definition of CompletionRequireProc was here
/usr/share/ruby/irb/completion.rb:94: warning: already initialized constant IRB::InputCompletor::CompletionProc
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:94: warning: previous definition of CompletionProc was here
/usr/share/ruby/irb/completion.rb:329: warning: already initialized constant IRB::InputCompletor::PerfectMatchedProc
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:329: warning: previous definition of PerfectMatchedProc was here
/usr/share/ruby/irb/completion.rb:364: warning: already initialized constant IRB::InputCompletor::Operators
/usr/share/gems/gems/irb-1.3.5/lib/irb/completion.rb:364: warning: previous definition of Operators was here
/usr/share/ruby/irb/color.rb:8: warning: already initialized constant IRB::Color::CLEAR
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:8: warning: previous definition of CLEAR was here
/usr/share/ruby/irb/color.rb:9: warning: already initialized constant IRB::Color::BOLD
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:9: warning: previous definition of BOLD was here
/usr/share/ruby/irb/color.rb:10: warning: already initialized constant IRB::Color::UNDERLINE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:10: warning: previous definition of UNDERLINE was here
/usr/share/ruby/irb/color.rb:11: warning: already initialized constant IRB::Color::REVERSE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:11: warning: previous definition of REVERSE was here
/usr/share/ruby/irb/color.rb:12: warning: already initialized constant IRB::Color::RED
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:12: warning: previous definition of RED was here
/usr/share/ruby/irb/color.rb:13: warning: already initialized constant IRB::Color::GREEN
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:13: warning: previous definition of GREEN was here
/usr/share/ruby/irb/color.rb:14: warning: already initialized constant IRB::Color::YELLOW
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:14: warning: previous definition of YELLOW was here
/usr/share/ruby/irb/color.rb:15: warning: already initialized constant IRB::Color::BLUE
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:15: warning: previous definition of BLUE was here
/usr/share/ruby/irb/color.rb:16: warning: already initialized constant IRB::Color::MAGENTA
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:16: warning: previous definition of MAGENTA was here
/usr/share/ruby/irb/color.rb:17: warning: already initialized constant IRB::Color::CYAN
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:17: warning: previous definition of CYAN was here
/usr/share/ruby/irb/color.rb:19: warning: already initialized constant IRB::Color::TOKEN_KEYWORDS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:19: warning: previous definition of TOKEN_KEYWORDS was here
/usr/share/ruby/irb/color.rb:26: warning: already initialized constant IRB::Color::ALL
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:26: warning: previous definition of ALL was here
/usr/share/ruby/irb/color.rb:32: warning: already initialized constant IRB::Color::TOKEN_SEQ_EXPRS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:32: warning: previous definition of TOKEN_SEQ_EXPRS was here
/usr/share/ruby/irb/color.rb:75: warning: already initialized constant IRB::Color::ERROR_TOKENS
/usr/share/gems/gems/irb-1.3.5/lib/irb/color.rb:75: warning: previous definition of ERROR_TOKENS was here


Note You need to log in before you can comment on or make changes to this bug.