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

Предполагая, что я собираю свой собственный свежий 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

и в свою очередь:

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"

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

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

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

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

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

XYZ представляет номер версии вашей версии ruby ​​C api.

Другие вопросы по тегам