我正在尝试使用海葵宝石编写爬行器,这需要机器人宝石.无论出于何种原因,机器人绝对不会包括.这是我的一些环境信息:
$ gem list -d robots
*** LOCAL GEMS ***
robots (0.10.1)
Author: Kyle Maxwell
Homepage: http://github.com/fizx/robots
Installed at: /usr/local/lib/ruby/gems/1.9.1
Simple robots.txt parser
$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.10
- RUBY VERSION: 1.9.2 (2011-02-18 patchlevel 180) [x86_64-darwin10.7.0]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/local/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-10
- GEM PATHS:
- /usr/local/lib/ruby/gems/1.9.1
- /Users/ryan/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
$ gem which robots
/usr/local/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?所有其他宝石正确加载,我以前从未遇到过这个问题.请注意,我使用的是ruby版本1.9,因此隐式需要rubygems.添加
require 'rubygems'
Run Code Online (Sandbox Code Playgroud)
...到脚本的前面返回false,因为文件已经包含在内,并且对这种情况没有帮助.有任何想法吗?
编辑:发布失败代码的示例.请注意,rubygems返回false并不意味着rubygems无法加载 - 而是已经加载了.见这篇文章:http://www.ruby-forum.com/topic/157442
$ irb
irb(main):001:0> require 'rubygems'
=> false
irb(main):002:0> require 'active_record'
=> true
irb(main):003:0> require 'mechanize'
=> true
irb(main):004:0> require 'robots'
LoadError: no such file to load -- robots
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from (irb):4
from /usr/local/bin/irb:12:in `<main>'
irb(main):005:0>
Run Code Online (Sandbox Code Playgroud)
mat*_*att 13
看起来像是用错误的权限创建了gem; 有打开这个在github上的错误.
使用更改权限
sudo chmod a+r /usr/local/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb
Run Code Online (Sandbox Code Playgroud)
应该修复它,但要注意其他权限问题.你可能会更好
sudo chmod -R a+r /usr/local/lib/ruby/gems/1.9.1/gems/robots-0.10.1
Run Code Online (Sandbox Code Playgroud)
递归地使gem中的所有文件都可读.
该robots.rb
文件(和其他一些)正在安装与权限-rw-rw----
,所以使用本地安装的人与本地用户将不会受到影响这个地方的宝石安装RVM或者类似的.