【问题标题】:Cannot load gem rack/test无法加载宝石架/测试
【发布时间】:2012-11-16 15:24:20
【问题描述】:

我正在尝试将 `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>'

我做错了什么?

【问题讨论】:

  • ruby -e 'require "rack/test"'的结果是什么
  • /home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in require':无法从 /home/jacky/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby 加载此类文件 -- rack/test (LoadError) /1.9.1/rubygems/custom_require.rb:36:in require' from -e:1:in
    '`

标签: ruby load-path


【解决方案1】:

这可能是 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 意味着读取它,因此这将引发@987654325 @。

检查权限

$ ls -l `gem which rack/test`

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

【讨论】:

  • 不幸的是,也不是这样。 ls -l /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-rw-r--r-- 1 jacky jacky 9723 2012-11-17 01:38 /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
  • 如果我提供完整路径,我也可以require 它。但是将其父目录添加到 $LOAD_PATH 并没有帮助。
  • 还有一件事:我认为这可能是一个所有权问题,因为我可以加载的 gem 属于 root:root,而我不属于 jacky:jacky 的 gem,所以我更改了所有权目录中的所有文件都到根目录,但这也无济于事。不过,这很有趣,因为 AFAIK 我可以加载的所有 gem 都在 root 下,而我不能加载的 gem 在 jacky 下。使用 root 重新安装 rack-test 没有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多