Какие пути, которые «требуют», ищет по умолчанию? - PullRequest
53 голосов
/ 28 февраля 2012

В Ruby мне сказали, что при выполнении

require "some_file"

Ruby будет искать файл в определенных местах.

Я знаю, что он ищет some_file.rb, но гдеон ищет его по умолчанию?

Ответы [ 6 ]

69 голосов
/ 28 февраля 2012

Это зависит от вашей платформы и от того, как был скомпилирован Ruby, поэтому нет «ответа» на это. Вы можете узнать, запустив:

ruby -e 'puts $:'

Обычно, как правило, у вас есть стандартные, Ruby и сайты библиотечных путей Ruby, включая arch, версию и общий каталог в каждом.

24 голосов
/ 28 февраля 2012

Ruby просматривает все пути, указанные в массиве $LOAD_PATH.

Вы также можете добавить каталог для поиска следующим образом:

$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
8 голосов
/ 13 августа 2015

дополнительные пути можно указать, установив переменную среды RUBYLIB

6 голосов
/ 28 февраля 2012

Глобальная переменная $ LOAD_PATH (также называемая $ :) содержит список каталогов, в которых выполняется поиск.

См .: http://www.ruby -doc.org / core-1.9.3 / Kernel.html # method-i-require

1 голос
/ 28 февраля 2012

require (string) => true или false

Ruby пытается загрузить библиотеку с именем string, возвращая true в случае успеха.Если имя файла не преобразуется в абсолютный путь, его будут искать в каталогах, перечисленных в $ :.Если файл имеет расширение «.rb», он загружается как исходный файл;если это расширение ".so", ".o" или ".dll" или любое другое расширение общей библиотеки по умолчанию на текущей платформе, Ruby загружает общую библиотеку как расширение Ruby.В противном случае Ruby пытается добавить к имени «.rb», «.so» и т. Д.Имя загруженной функции добавляется в массив в $:.

0 голосов
/ 16 апреля 2019

При вызове ruby в командной строке вы можете указать дополнительные пути поиска, используя аргумент -I.Сравните вывод

$ ruby -e 'puts $:'

с выводом

$ ruby -I /tmp -e 'puts $:'

, обратите внимание, как второй выводит /tmp в качестве опции.Вы можете использовать несколько -I для добавления нескольких путей.

Вы также можете использовать это с шебангом:

#!/usr/bin/ruby -I /tmp -I /usr/local/lib/ruby
...