假设您有一个可执行文件 foo.rb,其中的库 bar.rb 以下列方式布局:
<root>/bin/foo.rb
<root>/lib/bar.rb
在 foo.rb 的标题中,您需要在 bar.rb 中引入以下功能:
require File.dirname(__FILE__)+"../lib/bar.rb"
只要对 foo.rb 的所有调用都是直接的,这就可以正常工作。如果您输入 $HOME/project 并将符号链接 foo.rb 放入$HOME/usr/bin
,则
解析为__FILE__
$HOME/usr/bin/foo.rb
,因此无法找到bar.rb
与foo.rb
.
我意识到像 rubygems 这样的打包系统通过创建一个名称空间来搜索库来解决这个问题,并且也可以使用$:
include来调整 load_path $HOME/project/lib
,但似乎应该存在一个更简单的解决方案。有没有人遇到过这个问题并找到有用的解决方案或配方?