Ruby 为什么可以';我不能装Nokogiri吗?

Ruby 为什么可以';我不能装Nokogiri吗?,ruby,rvm,nokogiri,Ruby,Rvm,Nokogiri,我通过运行以下程序安装了Nokogiri,没有任何问题: $ sudo gem install nokogiri Building native extensions. This could take a while... Successfully installed nokogiri-1.5.9 1 gem installed Installing ri documentation for nokogiri-1.5.9... Installing RDoc documentation for

我通过运行以下程序安装了Nokogiri,没有任何问题:

$ sudo gem install nokogiri
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.5.9
1 gem installed
Installing ri documentation for nokogiri-1.5.9...
Installing RDoc documentation for nokogiri-1.5.9...
当我运行nokogiri.rb时:

#!/usr/bin/ruby -w

require 'nokogiri'

puts "Current directory is: #{ Dir.pwd }"
Dir.chdir("/home/askar/xml_files1") do |dirname|

  puts "Now in: #{ Dir.pwd }"
  xml_files = Dir.glob("ShipmentRequest*.xml")

  if xml_files.empty?
    puts "#{ dirname } is empty."
  else
    xml_files.each do |file|
      doc = Nokogiri::XML(open(file))
      # ... do something with the doc ...
    end
  end
end
我得到了一个错误:

$ ruby nokogiri.rb 
/home/askar/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- nokogiri (LoadError)
  from /home/askar/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

我使用的是Ruby1.9.3,但出于某种原因,它引用了Ruby1.9.1。这可能是原因吗?

如果仔细观察,路径以
/home/askar/.rvm/rubies/ruby-1.9.3-p429开始,因此加载路径应该是正确的

您的问题是您使用了
sudo
,它将为系统ruby进行gem安装。请在不使用sudo的情况下重试,只需

gem install nokogiri

为当前rvm ruby安装gems。

很高兴听到!很高兴我能提供帮助。注意,在再次安装gem之前,可能还需要运行
gem uninstall nokogiri
和/或
sudo uninstall nokogiri
。不管怎么说,这都是为我准备的。当我在没有
sudo
的情况下操作时,我遇到了FilePermissionError(
您没有/var/lib/gems/2.3.0目录的写入权限)。如果我使用
sudo
--但是--错误占上风。@mauroc8:授予在文件夹上写入的权限(例如:
sudo chmod-R 777/var/lib/gems/2.3.0
),那么它应该在没有
sudo
的情况下工作。如果您使用RVM或rbenv管理您的红宝石,则永远不要使用
sudo
安装gems,除非您当前设置为使用“系统”红宝石。@锡人。谢谢,我会记住的。为什么我被否决了?我在按照安装说明进行安装,他们在使用“sudo”“好了,我不知道你为什么会被否决,但我可以说你在遵循指示时没有进行精神检查。Nokogiri现场的说明与RVM或rbenv的使用无关。作为Ruby环境的“管理员”,您必须了解自己的情况,并决定是按照他们的指示行事,还是应用一些环境知识,排除他们的一些建议。你不能说“我这么做是因为他们说了!”,相反,你必须排除那些没有意义的事情。这当然是一次学习的经历,但你是老板。@锡人我同意你的看法。但是stackoverflow.com不是大学。人们来这里解决他们的问题和我犯的错误,我相信是可以原谅的。如果我问的是非建设性的或非常笼统的问题,我会理解的。我确信那个否决投票的管理员,这是他的主观意见,另一个管理员不会否决投票。:)