ruby/rubygems · error · Gem::RemoteFetcher::FetchError

too many redirects

Error message

too many redirects

What it means

Error "too many redirects" thrown in ruby/rubygems.

Source

Thrown at lib/rubygems/compact_index_client/http_fetcher.rb:38

    end

    def call(path, headers = {})
      fetch(@base_uri + path, headers, REDIRECT_LIMIT)
    end

    private

    def fetch(uri, headers, redirects_remaining)
      response = @remote_fetcher.request(uri, Gem::Net::HTTP::Get) do |req|
        headers.each {|name, value| req[name] = value }
      end

      case response
      when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
        response
      when Gem::Net::HTTPMovedPermanently, Gem::Net::HTTPFound, Gem::Net::HTTPSeeOther,
           Gem::Net::HTTPTemporaryRedirect, Gem::Net::HTTPPermanentRedirect
        raise Gem::RemoteFetcher::FetchError.new("too many redirects", uri) if redirects_remaining.zero?

        location = response["Location"]
        raise Gem::RemoteFetcher::FetchError.new("redirecting but no redirect location was given", uri) unless location

        fetch(uri + location, headers, redirects_remaining - 1)
      when Gem::Net::HTTPRangeNotSatisfiable
        raise Gem::RemoteFetcher::FetchError.new("bad response #{response.message} #{response.code}", uri) unless headers.key?("Range")

        # The local cache is longer than the remote file, refetch it whole.
        fetch(uri, headers.except("Range"), redirects_remaining)
      else
        raise Gem::RemoteFetcher::FetchError.new("bad response #{response.message} #{response.code}", uri)
      end
    end
  end
end

View on GitHub (pinned to 86cbb817a3)

When it happens

Trigger: Thrown at lib/rubygems/compact_index_client/http_fetcher.rb:38 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruby/rubygems@86cbb817a3 (2026-08-23). Data as JSON: /api/errors/ba5e39726f15b2d5. Report an issue: GitHub.