提醒我,我绝不是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>
答案 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文件夹的位置。