Ответ 1
Я действительно использую эту схему в производственном коде.
Требования к файлам относительно текущего местоположения источника имеют несколько преимуществ:
- исходное дерево может перемещаться в целом и остается пригодным для использования, поскольку нам требуются источники относительно друг друга.
- поскольку мы используем полные пути, мы избегаем случайных коллизий (загрузка источника с тем же именем в другой библиотеке или перезагрузка одного и того же источника дважды)
- код можно использовать без изменения пути поиска ruby
Если вы предпочитаете использовать измененный путь поиска Ruby, вы можете сделать это несколькими способами:
- добавление опций -I в командной строке ruby
- изменение переменной $LOAD_PATH в источниках
- игра с переменной окружения RUBYLIB
Решение 1 подразумевает управление вызовом ruby. Для запуска программы вам понадобится script, например:
@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 нецелесообразно, чем меньше зависимостей вы будете иметь к переменным среды, тем лучше вы будете.