Как определяется путь загрузки Ruby по умолчанию?

предполагая, что я компилирую свой собственный свежий Ruby (MRI 1.9.3), что такое LOAD_PATH по умолчанию и как это вычисляется?

2 ответов


на моей машине начальный путь загрузки выглядит следующим образом:

$ 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

и in поворот:

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"

следуя этой цепочке определений, становится ясно, что это соответствует первой записи в моем пути загрузки выше. Аналогично, другие константы, входящие в эту переменную, соответствуют другим записям пути загрузки.

на ruby_initial_load_paths[] переменная используется в ruby_init_loadpath_safe() на ruby.c, где фактический путь нагрузки настроен для процесса.

таким образом, ответ на ваш вопрос заключается в том, что начальный путь загрузки установлен на время компиляции с некоторыми #defineС, согласно Как построить был настроен.


ваша компиляция создает каталог lib в системах на основе * nix это обычно

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

X. Y. Z представляет номер версии вашей версии Ruby C api.