Я на самом деле использую эту схему в рабочем коде.
Запрос файлов относительно текущего местоположения источника имеет несколько преимуществ:
- исходное дерево можно перемещать как единое целое, и оно остается пригодным для использования, поскольку нам требуются источники относительно друг друга.
- поскольку мы используем полные пути, мы избегаем случайных коллизий (загрузка источника с тем же именем в другую библиотеку или перезагрузка одного и того же источника дважды)
- код можно использовать без изменения пути поиска ruby
Если вы предпочитаете использовать измененный путь поиска в ruby, вы можете сделать это несколькими способами:
- добавление параметров -I в командной строке ruby
- изменение переменной $ LOAD_PATH в источниках
- игра с переменной среды RUBYLIB
Решение 1 подразумевает управление тем, как вызывается ruby. Вам понадобится скрипт для запуска программы, такой как:
@echo off
REM my_script.cmd
set srcdir=%~dp0\..\path\to\source
ruby -I %srcdir% %srcdir%\my_script.rb
Или:
#!/bin/sh
srcdir=$(cd $(dirname $0)/../path/to/source && pwd)
exec ruby -I $srcdir $srcdir/my_script.rb
Решение 2 работоспособно, но не избегает столкновений. Обычно вы делаете что-то вроде:
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
Решение 3 не рекомендуется, чем меньше у вас зависимостей от переменных среды, тем лучше вы будете.