澄清Ruby'要求'不

时间:2014-10-27 06:10:41

标签: ruby rubygems

提醒我,我绝不是Ruby专家......我只是不时地使用它来进行基本脚本编写。我尝试使用RubyCocoa框架,以便在Ruby脚本中使用其他命令。

作为一个例子,如果我要尝试像这样明确的东西:

#!/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby

require '/System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/cocoa.rb'

puts "Hello, World"

我收到此错误:

/usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- osx/objc/cocoa.rb (LoadError)
from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/cocoa.rb:8:in `<top (required)>'
from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from Test.rb:4:in `<main>'

我的Mac上安装了Homebrew(运行10.10),但为什么require命令会进入Cellar文件夹?您可以看到我尝试使用我的Frameworks文件夹中的2.0 Ruby版本(/ usr / bin中的版本仍然是1.9.3(也希望有人解释这些版本之间的差异以及原因)。 / p>

1 个答案:

答案 0 :(得分:2)

它通过Cellar文件夹,因为它在您的加载路径中。 您可以通过编写脚本来检查加载路径

puts $:

关于您的错误消息

您可以在require中使用完全限定的路径

require '/System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/cocoa.rb'

是对的。

确实在您的错误消息中,您可以看到此行

from /System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/cocoa.rb:8:in `<top (required)>'

所以你正确required你的文件

但是从错误消息的第一行开始。

usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- osx/objc/cocoa.rb (LoadError)

我们可以看到ruby/osx/cocoa.rb尝试要求另一个文件。这个是不同的,可以在osx/objc/cocoa.rb下找到。因此,这些文件具有相似的名称但不同

因为它试图要求require 'osx/objc/cocoa.rb'它失败了,因为它不知道如何找到它(这里不是一个完全限定的路径)。

也许您可以尝试更改加载路径变量。 添加以下行:

$: << '/System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/objc/'

它可能有用,但我不确定,因为我不知道你的机器上osx / obj文件夹的位置。

您可能需要花一些时间来清理ruby安装,而不是使用rvmrbenv(我更喜欢rbenv)使用新鲜红宝石