0

我正在尝试将 `rack/test` 加载到我的应用程序中,但由于某种原因它无法正常工作。当我做:

gem list rack-test

我明白了

rack-test (0.6.2)

所以安装好了。

我还可以通过以下方式获取路径:

gem which rack/test

这是

/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/rack-test-0.6.2/lib/rack/test.rb

但是之后

ruby -e 'puts $LOAD_PATH.inspect; $LOAD_PATH << "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/"; require "rack/test"'

产量

["/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/i686-linux", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/i686-linux", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1", "/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/i686-linux"]
/home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- rack/test (LoadError)
    from /home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from -e:1:in `<main>'

我究竟做错了什么?

4

2 回答 2

0

这可能是 gem 文件的权限问题。rack/test.rb如果我使文件不可读,我可以重现您所看到的内容:

$ ls -l `gem which rack/test`
-rw-r--r--  1 matt  staff  9723  5 Nov 19:42 /Users/matt/.rvm/gems/ruby-1.9.3-p194/gems/rack-test-0.6.2/lib/rack/test.rb
$ ruby -e 'p require "rack/test"'
true
$ chmod a-r `gem which rack/test`
$ ls -l `gem which rack/test`
--w-------  1 matt  staff  9723  5 Nov 19:42 /Users/matt/.rvm/gems/ruby-1.9.3-p194/gems/rack-test-0.6.2/lib/rack/test.rb
$ ruby -e 'p require "rack/test"'
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require': cannot load such file -- rack/test (LoadError)
        from /Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
        from /Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
        from -e:1:in `<main>'

换句话说,如果文件存在但由于某种原因不可读,那么gem which将显示该文件,但在 Ruby 中尝试require它意味着读取它,因此这将引发一个LoadError.

检查权限

$ ls -l `gem which rack/test`

它们应该看起来像-rw-r--r--. 如果他们不这样做,这可能是你的问题。简单的修复方法是用于chmod更正权限,但您也需要查看其他文件,并尝试确定您的权限错误的原因。

于 2012-11-17T03:23:38.850 回答
0

通过重新安装rvm解决。由于某种原因,有一个多余的 ruby​​ 可执行文件,它把事情搞砸了。

于 2012-11-20T20:36:41.893 回答