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

uninitialized constant Bundler::SharedHelpers (NameError) #12891

Open
djberg96 opened this issue May 8, 2024 · 13 comments
Open

uninitialized constant Bundler::SharedHelpers (NameError) #12891

djberg96 opened this issue May 8, 2024 · 13 comments

Comments

@djberg96
Copy link

djberg96 commented May 8, 2024

Curious warning/error with a rubocop rake task, which is simply defined as RuboCop::RakeTask.new in the Rakefile:

>bundler -v
Bundler version 2.5.10

>gem -v
3.5.10

>ruby -v
ruby 3.2.4 (2024-04-23 revision af471c0e01) [x86_64-linux]

>bundle exec rubocop -V
1.63.4 (using Parser 3.3.1.0, rubocop-ast 1.31.3, running on ruby 3.2.4) [x86_64-linux]
  - rubocop-rspec 2.29.2

>rake rubocop
rake aborted!
NameError: uninitialized constant Bundler::SharedHelpers (NameError)

      Bundler::SharedHelpers.filesystem_access(loaded_from, :read) do
             ^^^^^^^^^^^^^^^
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `block in require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `synchronize'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
Tasks: TOP => rubocop
(See full trace by running task with --trace)
@Earlopain
Copy link
Contributor

I can't reproduce this. Can you give more detailed instructions?

@djberg96
Copy link
Author

djberg96 commented May 14, 2024

Repo in question: https://github.com/djberg96/io-extra

bundle install then rake rubocop

Full backtrace:

dberger:/home/dberger/Dev/io-extra [main]>rake rubocop --trace
** Invoke rubocop (first_time)
** Execute rubocop
rake aborted!
NameError: uninitialized constant Bundler::SharedHelpers (NameError)

      Bundler::SharedHelpers.filesystem_access(loaded_from, :read) do
             ^^^^^^^^^^^^^^^
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler/rubygems_ext.rb:151:in `data'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/stub_specification.rb:158:in `name'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/stub_specification.rb:88:in `activated?'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/specification.rb:1058:in `block in find_active_stub_by_path'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/specification.rb:1057:in `each'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/specification.rb:1057:in `find'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/specification.rb:1057:in `find_active_stub_by_path'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `block in require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `synchronize'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `require'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler/rubygems_ext.rb:211:in `<module:Gem>'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler/rubygems_ext.rb:33:in `<top (required)>'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:10:in `require_relative'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:10:in `<top (required)>'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop/lockfile.rb:6:in `<top (required)>'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop.rb:743:in `require_relative'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop.rb:743:in `<top (required)>'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
<internal:/home/dberger/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:136:in `require'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop/rake_task.rb:47:in `run_cli'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop/rake_task.rb:26:in `block (2 levels) in initialize'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/file_utils_ext.rb:58:in `verbose'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.4/lib/rubocop/rake_task.rb:24:in `block in initialize'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/home/dberger/.rbenv/versions/3.2.4/bin/rake:25:in `load'
/home/dberger/.rbenv/versions/3.2.4/bin/rake:25:in `<main>'
Tasks: TOP => rubocop

@djberg96
Copy link
Author

The weird thing is that I only see this on my Ubuntu laptop. Using my desktop Ubuntu VM, it works. Identical setup as far as I can tell. I double checked the results of bundler config (both empty) and neither has anything in a ~/.gemrc file.

@Earlopain
Copy link
Contributor

Yeah, there must be more to this. I tried with your repo and it just works for me

@djberg96
Copy link
Author

If I just run rubocop without using the Rake task I see this:

>rubocop
Inspecting 2 files
..

2 files inspected, no offenses detected
No such file or directory @ rb_sysopen - /home/dberger/Dev/io-extra/Gemfile.lock
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:526:in `initialize'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:526:in `open'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:526:in `block in read_file'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler/shared_helpers.rb:103:in `filesystem_access'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.5.10/lib/bundler.rb:525:in `read_file'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/lockfile.rb:77:in `parser'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/lockfile.rb:30:in `dependencies'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/command/suggest_extensions.rb:74:in `all_extensions'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/command/suggest_extensions.rb:96:in `not_installed_extensions'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/command/suggest_extensions.rb:88:in `extensions'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/command/suggest_extensions.rb:18:in `run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/command.rb:11:in `run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli/environment.rb:18:in `run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:122:in `run_command'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:134:in `suggest_extensions'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:129:in `block in execute_runners'
<internal:kernel>:90:in `tap'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:129:in `execute_runners'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:51:in `block in run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:81:in `profile_if_needed'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/lib/rubocop/cli.rb:43:in `run'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/exe/rubocop:19:in `block in <top (required)>'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/3.2.0/benchmark.rb:311:in `realtime'
/home/dberger/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/rubocop-1.63.5/exe/rubocop:19:in `<top (required)>'
/home/dberger/.rbenv/versions/3.2.4/bin/rubocop:25:in `load'
/home/dberger/.rbenv/versions/3.2.4/bin/rubocop:25:in `<main>'

@djberg96
Copy link
Author

djberg96 commented May 14, 2024

I dunno if this is a clue or what, but it works if I first, explicitly require 'bundler' at the top of the Rakefile and second, touch the Gemfile.lock file so that it exists before running the task. Why does it need this file to be present? No clue. It's not checked into the repo.

@Earlopain
Copy link
Contributor

Earlopain commented May 14, 2024

That's #12876, I have a PR open for that #12901. Maybe that also fixes this? Give it a try (I guess its a bit harder than just checking out the PR since it must be installed beforehand, not sure offhand how to do that).

For me the lockfile always generated before rubocop tried to access it

@djberg96
Copy link
Author

@Earlopain Seems to fix running rubocop, but not if run as a rake task.

@djberg96
Copy link
Author

@Earlopain I'm also sort of confused by the lockfile.rb code in general. If rubocop needs bundler to function properly, then why not make it a gem dependency instead of this rigamarole they've got going on in that file?

@Earlopain
Copy link
Contributor

Earlopain commented May 14, 2024

I guess it's more of a optional dependency. Since everything around it relies on the contents of a lockfile it's a safe assumption to make that bundler will be around as well. That's how I would rationalize it.

I think you may be running into a bundler bug. rubygems/rubygems#7647 seems very relevant as it mentions rakefiles and SharedHelpers. The description is too complicated for me to quickly understand but I think that may be it.

Downgrading bundler to 2.5.9 should confirm this.

@djberg96
Copy link
Author

Downgrading to 2.5.9 didn't seem to do it, though I'm also not 100% sure because downgrading bundler required some manual fiddling since it's a default gem. Could be, though.

But, that still wouldn't explain why it only seems to happen on my laptop.

@Earlopain
Copy link
Contributor

It does say this:

However, the autoload does not seem to be triggering under some situations, such as when loading our own Rakefile. But that also does not happen always, but only when you have two different versions of psych installed in your system.

Which I guess could be a difference between your two machines. I installed a different psych version and didn't reproduce though

@djberg96
Copy link
Author

djberg96 commented May 14, 2024

Yep, I'm only showing psych 5.01 on both systems.

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

No branches or pull requests

2 participants