假设我编译自己的新Ruby(MRI 1.9.3),默认的LOAD_PATH是什么,以及如何计算?
假设我编译自己的新Ruby(MRI 1.9.3),默认的LOAD_PATH是什么,以及如何计算?
在我的机器上,初始加载路径如下所示:
$ 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源的调查导致了 的定义 ruby_initial_load_paths[]
在 version.c
(这是在Ruby 1.9.3上)。第一个适用(两个都没有 NO_INITIAL_LOAD_PATH
要么 RUBY_SEARCH_PATH
已经设定)是 RUBY_SITE_LIB2
。查看上面定义的定义 我们看:
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
和 反过来:
#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目。类似地,进入此变量的其他常量对应于其他加载路径条目。
该 ruby_initial_load_paths[]
变量用于 ruby_init_loadpath_safe()
在 ruby.c
,为过程设置实际负载路径。
所以你的问题的答案是初始加载路径是在编译时设置的 #define
s,根据构建的配置方式。
您的编译创建一个lib目录 基于* nix的系统通常是
/usr/lib/ruby/X.Y.Z
X.Y.Z表示ruby C api版本的版本号。
在我的机器上,初始加载路径如下所示:
$ 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源的调查导致了 的定义 ruby_initial_load_paths[]
在 version.c
(这是在Ruby 1.9.3上)。第一个适用(两个都没有 NO_INITIAL_LOAD_PATH
要么 RUBY_SEARCH_PATH
已经设定)是 RUBY_SITE_LIB2
。查看上面定义的定义 我们看:
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
和 反过来:
#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目。类似地,进入此变量的其他常量对应于其他加载路径条目。
该 ruby_initial_load_paths[]
变量用于 ruby_init_loadpath_safe()
在 ruby.c
,为过程设置实际负载路径。
所以你的问题的答案是初始加载路径是在编译时设置的 #define
s,根据构建的配置方式。
您的编译创建一个lib目录 基于* nix的系统通常是
/usr/lib/ruby/X.Y.Z
X.Y.Z表示ruby C api版本的版本号。