Bug 2229153
| Summary: | Lots of "already initialized constant" messages issued when rubygem-irb is used in scripts | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 9 | Reporter: | Carlos Santos <casantos> |
| Component: | ruby | Assignee: | ruby maint <ruby-maint> |
| Status: | NEW --- | QA Contact: | RHEL CS Apps Subsystem QE <rhel-cs-apps-subsystem-qe> |
| Severity: | low | Docs Contact: | |
| Priority: | low | ||
| Version: | 9.2 | ||
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | Bug | |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
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