【问题标题】:How is the default Ruby LOAD_PATH determined?默认的 Ruby LOAD_PATH 是如何确定的?
【发布时间】:2012-06-05 23:08:18
【问题描述】:

假设我编译自己的新 Ruby (MRI 1.9.3),默认的 LOAD_PATH 是什么,它是如何计算的?

【问题讨论】:

    标签: ruby require load-path


    【解决方案1】:

    在我的机器上,初始加载路径如下所示:

    $ 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_PATHRUBY_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,其中为进程设置了实际加载路径。

    因此,您的问题的答案是,初始加载路径是在编译时设置的,根据构建的配置方式,使用了一些 #defines。

    【讨论】:

      【解决方案2】:

      你的编译创建一个lib目录 在基于 *nix 的系统上,它通常是

      /usr/lib/ruby/X.Y.Z
      

      X.Y.Z 代表你的 ruby​​ C api 版本的版本号。

      【讨论】:

      • 不,不是,这里的版本号代表Ruby C API版本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2018-07-15
      • 2011-01-18
      • 1970-01-01
      • 2010-10-29
      • 2010-12-25
      相关资源
      最近更新 更多