net/http gem 不在 Ruby 的默认库中吗?

Is the net/http gem not in the default library for Ruby?

我想通过键入 'bundle install' 创建 Gemfile.lock,但我的本地计算机找不到 gem net/http。我试过输入 'bundle update net/http' & 'bundle --full-index' & 'gem install bundler' 但是当我再次输入 'bundle install' 时我总是收到这个错误:

Could not find gem 'net/http' in rubygems repository https://rubygems.org/ or installed locally. The source does not contain any versions of 'net/http'

我的 Gemfile 类似于以下内容:

source "https://rubygems.org"

gem 'open-uri'
gem 'nokogiri'
gem 'net/http'
gem 'pry'

此问题的其他解决方案建议删除 gem net/http 行,因为 net/http 是 Ruby 默认库的一部分...但是当我这样做时这一切都加载正常,我可以在输入 'bundle install' 时创建一个 Gemfile.lock 但是当我 运行 我的代码时,我收到以下错误:

Traceback (most recent call last): run.rb:4:in `': uninitialized constant Net (NameError) Did you mean? Set

这里引用的代码行是

response = Net::HTTP.get(url)

我运行宁Ruby版本2.6.1

gem 的名称是 net-http。当您 google 获得“net/http”时,它是首批点击之一。

但是,在 Ruby 2.6.1 中,net/http is still part of the standard library 不是 gem。 Net/http 仅在 Ruby 3.0 中从标准库中删除。

有两种不同的标准gems:

  • 默认 gems:这些 gems 是 Ruby 的一部分,您可以随时直接要求它们。您无法删除它们。它们由 Ruby 核心维护。

  • Bundled gems:捆绑的 gems 的行为类似于正常的 gems,但它们会在您安装 [=36] 时自动安装=].它们可以被卸载并在 Ruby 核心之外进行维护。

你的问题是错误的名字gem('net-http'而不是'net/http',你可以运行gem search ^net找出远程gem 以 'net').

开头

如果gem是'default',则无需在Gemfile中声明。

您可以检查标准默认值 gems:https://stdgems.org/