Nokogiri Ruby'需要'问题

时间:2014-01-09 19:25:50

标签: ruby linux gem 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 am I在这里做错了吗?)

我在~/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+但仍然没有运气。

很多搜索显示“你把这个宝石放在你的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

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

2 个答案:

答案 0 :(得分:1)

对于初学者来说,像RVM,Bundler等Ruby工具似乎做了很多魔术,但实际上,他们没有魔力。关键在于Bundler实际为您做的事情。它管理依赖关系的清单,但是在运行时,那些依赖关系仍然必须以某种方式加载,而我的直觉就是这里没有发生的事情。

无论您使用的是哪个版本的Ruby,如果您使用的是Bundler,都可以通过简单的方法完成此操作。在使用“bundle exec”启动程序的命令之前,这将使Bundler编辑Ruby的加载路径,使其包含清单中的所有内容(Gemfile.lock)。

例如:

$ bundle exec ruby foo.rb

使用RVM的任何人的附加说明:RVM通常会修改启动“ruby”或“rake”等程序的脚本中的shebang,以便他们使用“ruby_no_exec”shell(或类似的)而不是普通的旧版“红宝石“壳。该备用shell是Bundler感知的并且通常不需要键入“bundle exec”,但由于OP使用系统Ruby,这不适用,命令应该手动加上“bundle exec”。

希望这有帮助!

答案 1 :(得分:1)

除了肯特的回答,我建议切换到RVM而不是使用系统安装的ruby。系统红宝石可能会过时,特别是在涉及功能和安全更新等重要事项时。在你目前的情况下它可能对你没有帮助,但是值得花时间。如果您不熟悉:http://rvm.io