Search code examples
ruby-on-railsruby

gem update --system failure


Running gem update --system fails with the following error:

#22 71.91 ERROR:  Error installing rubygems-update:
#22 71.91   There are no versions of rubygems-update (= 3.5.2) compatible with your Ruby & RubyGems
#22 71.91   rubygems-update requires Ruby version >= 3.0.0. The current ruby version is 2.7.5.203.
#22 71.91 ERROR:  While executing gem ... (NoMethodError)
#22 71.91     undefined method `version' for nil:NilClass
#22 71.93 Updating rubygems-update

My ruby version is:

rbenv local:
2.7.5

Do I need to find the compatible version of rubygems-update with ruby 2.7.5 and install it?


Solution

  • Either you can go to the RubyGems version list of rubygems-update, and click on each one until you find a version that matches your Ruby version criteria (<= 2.7.5), or then we play programmer and do it the fun way:

    require 'open-uri'
    require 'json'
    
    GEM_TO_TEST           = "rubygems-update"
    RUBY_VERSION_TO_MATCH = "2.7.5"
    
    API_URL = "https://rubygems.org/api/v1/versions/#{GEM_TO_TEST}.json"
    
    # Load list of all available versions of GEM_TO_TEST
    gem_versions = JSON.parse(open(API_URL).read)
    
    # Process list to find matching Ruby version
    matching_gem = gem_versions.find { |gem|
      Gem::Dependency.new('', gem['ruby_version']).
        match?('', RUBY_VERSION_TO_MATCH)
    }
    
    puts "Latest version of #{GEM_TO_TEST} " +
         "compatible with Ruby #{RUBY_VERSION_TO_MATCH} " +
         "is #{matching_gem['number']}."
    

    If we run that, out comes:

    Latest version of rubygems-update compatible with Ruby 2.7.5 is 3.4.22.
    

    Therefore the solution to your problem is (most likely):

    gem update --system 3.4.22