假设我编译自己的新Ruby(MRI 1.9.3),默认的LOAD_PATH是什么,以及如何计算?
答案 0 :(得分:14)
在我的机器上,初始加载路径如下所示:
$ ruby -e 'puts $LOAD_PATH'
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0
使用grep
,对Ruby源的调查导致definition of ruby_initial_load_paths[]
in version.c
(这是在Ruby 1.9.3上)。其中第一个适用(NO_INITIAL_LOAD_PATH
或RUBY_SEARCH_PATH
已设置)RUBY_SITE_LIB2
。查看定义we see上面的定义:
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
和in turn:
#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目。类似地,进入此变量的其他常量对应于其他加载路径条目。
ruby_initial_load_paths[]
变量用于ruby_init_loadpath_safe()
in ruby.c
,其中为流程设置了实际的加载路径。
所以你的问题的答案是根据构建的配置方式,初始加载路径在编译时设置了一些#define
s。
答案 1 :(得分:0)
您的编译会创建一个lib目录 基于* nix的系统通常是
/usr/lib/ruby/X.Y.Z
X.Y.Z表示ruby C api版本的版本号。