Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When installing Ruby's default gems from rubygems, both gems load. #3213

Closed
y-yagi opened this issue May 18, 2018 · 6 comments · Fixed by #3991
Closed

When installing Ruby's default gems from rubygems, both gems load. #3213

y-yagi opened this issue May 18, 2018 · 6 comments · Fixed by #3991

Comments

@y-yagi
Copy link
Contributor

y-yagi commented May 18, 2018

Hi.

I installed Ruby's Default gems separately from rubygems (version is different from default).
After that, when run a script using bundler/inline, a warning is generated that the constants of the installed gem are redefined.

Steps to reproduce

# main.rb

# frozen_string_literal: true

require "bundler/inline"

gemfile(true) do
  source "https://rubygems.org"

  git_source(:github) { |repo| "https://github.com/#{repo}.git" }

  gem "rack-test"
end

require "rack/test" 
$ gem install fileutils
Fetching: fileutils-1.1.0.gem (100%)
Successfully installed fileutils-1.1.0
1 gem installed 

$ ruby main.rb
Fetching gem metadata from https://rubygems.org/...............
Resolving dependencies...
Using bundler 1.16.2
Using rack 2.0.5
Using rack-test 1.0.0
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:90: warning: already initialized constant FileUtils::VERSION
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:92: warning: previous definition of VERSION was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant FileUtils::Entry_::S_IF_DOOR
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1267: warning: previous definition of S_IF_DOOR was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1446: warning: already initialized constant FileUtils::Entry_::DIRECTORY_TERM
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1541: warning: previous definition of DIRECTORY_TERM was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1448: warning: already initialized constant FileUtils::Entry_::SYSCASE
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1543: warning: previous definition of SYSCASE was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1501: warning: already initialized constant FileUtils::OPT_TABLE
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1596: warning: previous definition of OPT_TABLE was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1555: warning: already initialized constant FileUtils::LOW_METHODS
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1650: warning: previous definition of LOW_METHODS was here
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1562: warning: already initialized constant FileUtils::METHODS
/home/yaginuma/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1657: warning: previous definition of METHODS was here

FYI: rack-test requires fileutils.
https://github.com/rack-test/rack-test/blob/03eb717b3e95faf1d64fc26fb9559868884333ce/lib/rack/test/uploaded_file.rb#L1

Expected behavior

Warnings are not displayed.

Actual behavior

Warnings are displayed.

System configuration

Ruby version:

$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

Bundler version:

$ bundler -v
Bundler version 1.16.2
@segiddins
Copy link
Member

Out of curiosity, does this happen if you use a normal gemfile instead of an inline one?

@y-yagi
Copy link
Contributor Author

y-yagi commented May 25, 2018

Hmm. It seems that this does not happen with normal gemfile.

$ cat Gemfile
source 'https://rubygems.org'

gem 'rack-test' 
$ bundle install
Using bundler 1.16.2
Using rack 2.0.5
Using rack-test 1.0.0
Bundle complete! 1 Gemfile dependency, 3 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
$ bundle exec ruby -w -e "p require 'rack/test'"
true

@segiddins
Copy link
Member

I'm going to guess this is because inline goes through the installation code, which requires fileutils, so I'm not sure this is even fixable :/

@mturnaviotov
Copy link

I create rails 5.2 test app with ruby 2.5.1 some days ago and have a same errors when rails server starting too.
Seems like double loading fileutils ?

% rails db:migrate
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:90: warning: already initialized constant Fi
leUtils::VERSION
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:92: warning: p
revious definition of VERSION was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant
FileUtils::Entry_::S_IF_DOOR
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1267: warning:
previous definition of S_IF_DOOR was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1446: warning: already initialized constant
FileUtils::Entry_::DIRECTORY_TERM
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1541: warning:
previous definition of DIRECTORY_TERM was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1448: warning: already initialized constant
FileUtils::Entry_::SYSCASE
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1543: warning:
previous definition of SYSCASE was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1501: warning: already initialized constant
FileUtils::OPT_TABLE
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1596: warning:
previous definition of OPT_TABLE was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1555: warning: already initialized constant
FileUtils::LOW_METHODS
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1650: warning:
previous definition of LOW_METHODS was here
/home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1562: warning: already initialized constant
FileUtils::METHODS
/home/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1657: warning:
previous definition of METHODS was here

@hsbt hsbt transferred this issue from rubygems/bundler Mar 14, 2020
@deivid-rodriguez
Copy link
Member

Hi @y-yagi! Still pending a regression spec, but I think #3991 should fix this!

@deivid-rodriguez
Copy link
Member

The PR should be ready now, I'll merge it in a couple of days!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants