想象一下,你有一个可执行文件foo.rb,库bar.rb按以下方式排列:
/bin/foo.rb /lib/bar.rb
在foo.rb的标题中,您将以下要求放入bar.rb中引入功能:
require File.dirname(__FILE__)+"../lib/bar.rb"
只要对foo.rb的所有调用都是直接的,这就可以正常工作.如果您将$ HOME/project和symlink foo.rb放入$HOME/usr/bin
,则
解析为__FILE__
$HOME/usr/bin/foo.rb
,因此无法找到bar.rb
与dirname相关的位置foo.rb
.
我意识到像rubygems这样的打包系统通过创建一个命名空间来搜索库来解决这个问题,并且还可以使用$:
include 来调整load_path $HOME/project/lib
,但似乎应该存在一个更简单的解决方案.有没有人有这个问题的经验,并找到了有用的解决方案或食谱?
我知道这已经很久了,但我发现了这个:
require 'pathname' APP_ROOT = File.join(File.dirname(Pathname.new(__FILE__).realpath),'..')