Skip to content

MSWindows Builds Broken #9277

@cfis

Description

@cfis

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:

https://github.com/ruby/ruby/blob/ba8b0b3a9c867421166083c2eb35204c616beb4b/lib/rubygems/specification.rb#L1384.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions