Как потребовать рубиновый файл из другого каталога
Я пытаюсь потребовать файл rake, который я создал в другом файле, который у меня есть. Эти два файла находятся внутри двух разных каталогов. У меня есть требование в верхней части моего первого файла с именем второго файла внутри кавычек после запроса.
Это говорит мне, что он не может загрузить такой файл.
Означает ли это, потому что его в другом каталоге он не может найти?
Я попытался придерживаться полного пути ко второму файлу, но он все еще не может загрузить файл.
Кто-нибудь знает, как я могу загрузить второй файл в первый?
Заранее спасибо
Ответы
Ответ 1
require
будет искать файлы только в нескольких местах, называемых "Путь загрузки". Вы можете просмотреть путь загрузки, используя глобальную переменную $LOAD_PATH
в сеансе script или irb. Если он не находится в пути загрузки, он не найдет его.
Ruby 1.9 представил require_relative
, который ищет в качестве отправной точки текущее местоположение файла.
# Will search $LOAD_PATH for file.
require 'test/unit'
# Notice the '/' which tells it to look in the
# 'test' folder for a file named 'unit.rb'
# Will look in current folder of file
require_relative 'my_folder/my_file'
# Will search in 'my_folder' for the file 'my_file.rb'
Обратите внимание, что require_relative
не будет работать в irb.
Также обратите внимание, что если вы действительно хотите использовать require
, вы можете запустить свой script, добавив местоположение в переменную $LOAD_PATH
.
$LOAD_PATH << File.join('users', 'yourusername', 'your_folder')
# or
$LOAD_PATH << File.dirname(__FILE__)
# The second one enables you to move the file around on your
# system and still operate correctly
require 'my_file'
Здесь есть дополнительная документация от Ruby-Doc:
Ответ 2
Из документов: Предлагается использовать require relative. Документы
require_relative
дополняет встроенный метод, требуя, чтобы вы могли загрузить файл, относящийся к файлу, содержащему инструкцию require_relative
.
Когда вы используете require
для загрузки файла, вы обычно получаете доступ к функциям, которые были правильно установлены и доступны в вашей системе. require не предлагает хорошего решения для загрузки файлов в код проекта. Это может быть полезно на этапе разработки, для доступа к тестовым данным или даже для доступа к файлам, которые "заблокированы" внутри проекта, а не предназначены для внешнего использования.
Например, если в каталоге "test" есть unit test классы и данные для них в тестовом каталоге "test/data", вы можете использовать такую строку в тестовом примере:
require_relative "data/customer_data_1"
Ответ 3
Также возможно:
require './something.rb'
из текущего каталога для включения.