Вот чем я закончил - Ruby-версия setenv
сценария оболочки:
# Read application config
$hConf, $fConf = {}, File.expand_path("../config.rb", __FILE__)
$hConf = File.open($fConf) {|f| eval(f.read)} if File.exist? $fConf
# Application classpath
$: << ($hConf[:appRoot] || File.expand_path("../bin/app", __FILE__))
# Ruby libs
$lib = ($hConf[:rubyLib] || File.expand_path("../bin/lib", __FILE__))
($: << [$lib]).flatten! # lib is string or array, standardize
Тогда мне просто нужно убедиться, что этот скрипт вызывается один раз, прежде чем что-либо еще, и не нужно трогать отдельные исходные файлы.
Я поместил некоторые параметры в конфигурационный файл, например расположение внешних (не gem) библиотек:
# Site- and server specific config - location of DB, tmp files etc.
{
:webRoot => "/srv/www/myapp/data",
:rubyLib => "/somewhere/lib",
:tmpDir => "/tmp/myapp"
}
Это хорошо работает для меня, и я могу повторно использовать сценарий setenv в нескольких проектах, просто изменив параметры в файле конфигурации. Гораздо лучшая альтернатива, чем сценарии оболочки, IMO.