Представьте, что у вас есть исполняемый файл 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 и symlink foo.rb в $HOME/usr/bin
, то <code>__FILE__
разрешится в $HOME/usr/bin/foo.rb
и, таким образом, не сможет найти bar.rb
относительно имени dirname для foo.rb
.
Я понимаю, что системы упаковки, такие как rubygems, исправляют это, создавая пространство имен для поиска в библиотеке, и что также можно настроить путь загрузки, используя $:
, чтобы включить $HOME/project/lib
, но кажется, что более простое решение должно существовать. Кто-нибудь имел опыт решения этой проблемы и нашел полезное решение или рецепт?