В Ruby мне сказали, что при выполнении
require "some_file"
Ruby будет искать файл в определенных местах.
Я знаю, что он ищет some_file.rb
, но где его искать по умолчанию?
В Ruby мне сказали, что при выполнении
require "some_file"
Ruby будет искать файл в определенных местах.
Я знаю, что он ищет some_file.rb
, но где его искать по умолчанию?
Это зависит от вашей платформы и того, как Ruby был скомпилирован, поэтому нет ответа на этот вопрос. Вы можете узнать, выполнив:
ruby -e 'puts $:'
Как правило, у вас есть стандартные пути, библиотеки и поставщики Ruby, включая арку, версию и общий каталог под каждым.
Ruby просматривает все пути, указанные в массиве $LOAD_PATH
.
Вы также можете добавить каталог для поиска следующим образом:
$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
дополнительные пути можно указать, установив переменную среды RUBYLIB
Глобальная переменная $LOAD_PATH (также называемая $:) содержит список искомых каталогов.
Смотрите: http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-require
require (string) = > true или false
Ruby пытается загрузить библиотеку с именем string, возвращая true в случае успеха. Если имя файла не разрешено к абсолютному пути, оно будет искать в каталогах, перечисленных в $:. Если файл имеет расширение ".rb", он загружается в качестве исходного файла; если расширение ".so", ".o" или ".dll" или что-либо, что расширяет доступ к общей библиотеке по умолчанию на текущей платформе, Ruby загружает общую библиотеку в качестве расширения Ruby. В противном случае Ruby пытается добавить ".rb", ".so" и т.д. К имени. Имя загруженной функции добавляется к массиву в $:.
При вызове ruby
в командной строке вы можете -I
дополнительные пути поиска, используя аргумент -I
. Сравните вывод
$ ruby -e 'puts $:'
с выходом
$ ruby -I /tmp -e 'puts $:'
обратите внимание, как второй перечисляет /tmp
в качестве опции. Вы можете использовать несколько -I
чтобы добавить несколько путей.
Вы также можете использовать его с Шебанг:
#!/usr/bin/ruby -I /tmp -I /usr/local/lib/ruby