uninitialized constant Bundler::SharedHelpers (NameError)
djberg96 opened this issue · comments
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)
I can't reproduce this. Can you give more detailed instructions?
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
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.
Yeah, there must be more to this. I tried with your repo and it just works for me
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>'
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 Seems to fix running rubocop
, but not if run as a rake task.
@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?
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.
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.
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
Yep, I'm only showing psych 5.01 on both systems.
Looks like a new bundler version released yesterday. Give that a try?
@Earlopain Yep, that seems to have fixed it, thanks!
Bundler 2.5.11 for anyone reading this.
Nice!