这就是我最终得到的——一个 Ruby 版本的setenv
shell 脚本:
# 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 脚本。比 shell 脚本更好的选择,IMO。