-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Download ruby 4.0.1 and build with msvc following the official instructions. Try to install a gem. Get an error like this:
gem install fiddle
ERROR: Loading command: install (NameError)
uninitialized constant Gem::Commands::InstallCommand
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:241:in 'Module#const_get'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:241:in 'Gem::CommandManager#load_and_instantiate'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:137:in 'Gem::CommandManager#[]'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:209:in 'Gem::CommandManager#find_command'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:250:in 'Gem::CommandManager#invoke_command'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:193:in 'Gem::CommandManager#process_args'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:151:in 'Gem::CommandManager#run'
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/gem_runner.rb:56:in 'Gem::GemRunner#run'
C:/msys64/usr/local/ruby/bin/gem.cmd:20:in '<main>'
Digging deeper, I removed the exception handling at line 236 in command_manager.rb - https://github.com/ruby/ruby/blob/ba8b0b3a9c867421166083c2eb35204c616beb4b/lib/rubygems/command_manager.rb#L236
Now I see:
gem install fiddle
error_highlight
did_you_mean
syntax_suggest
etc
fileutils
openssl
digest
io-nonblock
ipaddr
io-wait
win32-registry
win32-registry
C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/specification.rb:1410:in 'block in Gem::Specification#activate_dependencies': Could not find 'fiddle' (~> 1.0) among 87 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=C:/Users/cfis/.local/share/gem/ruby/4.0.0;C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/gems/4.0.0' at: C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/gems/4.0.0/specifications/win32-registry-0.1.2.gemspec, execute `gem env` for more information
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/specification.rb:1396:in 'Array#each'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/specification.rb:1396:in 'Gem::Specification#activate_dependencies'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/specification.rb:1378:in 'Gem::Specification#activate'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/core_ext/kernel_gem.rb:62:in 'block in Kernel#gem'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/core_ext/kernel_gem.rb:62:in 'Thread::Mutex#synchronize'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/core_ext/kernel_gem.rb:62:in 'Kernel#gem'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/resolv/lib/resolv.rb:1025:in 'Kernel#require'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/resolv/lib/resolv.rb:1025:in 'Gem::Resolv::DNS::Config.default_config_hash'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/resolv/lib/resolv.rb:94:in 'Gem::Resolv#initialize'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/resolv/lib/resolv.rb:3468:in '<class:Resolv>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/resolv/lib/resolv.rb:34:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/net-http/lib/net/http.rb:25:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendor/net-http/lib/net/http.rb:25:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendored_net_http.rb:5:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/vendored_net_http.rb:5:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/request.rb:3:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/request.rb:3:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/remote_fetcher.rb:4:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/remote_fetcher.rb:4:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/spec_fetcher.rb:3:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/spec_fetcher.rb:3:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/dependency_installer.rb:7:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/dependency_installer.rb:7:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/commands/install_command.rb:5:in 'Kernel#require_relative'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/commands/install_command.rb:5:in '<top (required)>'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:235:in 'Kernel#require'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:235:in 'Gem::CommandManager#load_and_instantiate'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:137:in 'Gem::CommandManager#[]'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:209:in 'Gem::CommandManager#find_command'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:250:in 'Gem::CommandManager#invoke_command'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:193:in 'Gem::CommandManager#process_args'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/command_manager.rb:151:in 'Gem::CommandManager#run'
from C:/msys64/usr/local/ruby-4.0.1-mswin/lib/ruby/4.0.0/rubygems/gem_runner.rb:56:in 'Gem::GemRunner#run'
from C:/msys64/usr/local/ruby/bin/gem.cmd:20:in '<main>'
The win32-registry gem requires fiddle which I'm trying to install. That causes an exception and the GEM commands are not loaded thus breaking ruby gems completely. You can't run any command, not even gem list. I have used msvc builds of Ruby for years and this has never happened before, so seems new for Ruby 4.0.
My hacky solution was to comment out activate_dependencies here:
That allowed me to install the ffi gem and thus fix rubygems.
But of course rubygems should not break just because a gem dependency cannot be loaded.