ruby - Nokogiri Ruby 'require' 问题

标签 ruby linux rubygems nokogiri

我是 Ruby 的新手,在尝试使用 Nokogiri 时遇到了很多麻烦。几个小时以来,我一直在努力寻找解决方案,因此我们将不胜感激。在挖掘和发布我自己的之前,我尝试从其他相关的 SO 帖子中搜索和使用解决方案。当我运行 ruby -v 时,我得到:ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

(编辑:我已经使用 updates-alternatives --config ruby​​ 更新了 ruby​​ 并选择了 /usr/bin/ruby1.9.1 但是当我执行 ruby -v 时,它现在显示版本 1.9.3 WTF 我在这里做错了吗?)

我在 ~/workspace/ruby/rubycrawler/ 有一个新的项目目录,我使用 Bundler 安装了 nokogiri,它安装正确:

Using mini_portile (0.5.2)
Using nokogiri (1.6.1)
Using bundler (1.5.1)
Your bundle is complete!

运行 bundle show nokogiri 返回 /var/lib/gems/1.9.1/gems/nokogiri-1.6.1

在我运行脚本的目录中,我有一个名为“index.html”的简单 html 文件。我尝试运行的脚本更简单(或者我认为如此):

require 'nokogiri'
page = Nokogiri::HTML(open("index.html"))
puts page.class    # Nokogiri::HTML::Document

错误是 rubycrawler.rb:1:in 'require': no such file to load -- nokogiri (LoadError)

我还添加了 require 'rubygems',尽管我读到 1.9+ 不需要它并且仍然没有运气。

大量搜索显示“您是否将此 gem 放入您的 Gemfile 中?”。所以我生成了一个 Gemfile 并添加了 gem 'nokogiri'。我尝试再次运行小脚本并得到相同的错误。我读到“尝试删除 Gemfile.lock。” 所以我做了,但仍然无法让它工作。然后我阅读并尝试在 irb 中测试它,所以我测试了“open-uri”和“nokogiri”,这就是我得到的:

irb(main):001:0> require 'open-uri'
=> true
irb(main):003:0> require 'nokogiri'
LoadError: no such file to load -- nokogiri

我真的很难解决这个问题,所以真的非常感谢任何帮助。

最佳答案

Ruby 工具,如 RVM、Bundler 等,对于新手来说,看起来很神奇,但实际上,它们并没有什么神奇之处。这里的关键在于 Bundler 实际为您做了什么。它管理依赖项 list ,但在运行时,这些依赖项仍然必须以某种方式加载,我的直觉是这里没有发生这种情况。

无论您使用的是哪个版本的 Ruby,如果您使用的是 Bundler,都有一种简单的方法可以做到这一点。在启动程序的命令之前加上“bundle exec”,这将使 Bundler 编辑 Ruby 的加载路径,以便它包含 list (Gemfile.lock) 中的所有内容。

例如:

$ bundle exec ruby foo.rb

对任何使用 RVM 的人的附加说明:RVM 通常会修改启动程序(如“ruby”或“rake”)的脚本中的 shebang,以便它们使用“ruby_no_exec”shell(或类似的)而不是普通的旧“ ruby ”外壳。该备用 shell 是 Bundler 感知的,因此通常无需键入“bundle exec”,但由于 OP 使用的是系统 Ruby,因此这不适用,命令应手动添加前缀“bundle exec”。

希望这对您有所帮助!

关于ruby - Nokogiri Ruby 'require' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029317/

相关文章:

linux - 查找 [主机] : no such host error in Go

ruby - 如果路径中有西里尔字符,如何使用 require

Ruby Mechanize gem,从本地 html 副本恢复 Mechanize::Page 对象

python - Ruby:无法在 Windows 7 上安装 libv8:缺少 python 安装

xml - 删除 XML 标记及其内容之间的任何内容

ruby - 在 Rails 3.2 应用程序中包含 Git 中 vendor/cache 的内容是否可取?

ruby - Twitter gem 搜索仅返回过去一周的推文

ruby-on-rails - 如何在 Rails 中使用 group_by 和 fields_for?

java - 不支持登录方式! JavaMail、Dovecot、CentOS 7

c++ - 无法从伪终端读取