21

Я пытаюсь потребовать файл рейка, который я создал в другом файле, который у меня есть. Эти два файла находятся внутри двух разных каталогов. У меня есть требование в верхней части моего первого файла с именем второго файла внутри кавычек после запроса. Это говорит мне, что он не может загрузить такой файл. Означает ли это, потому что его в другом каталоге он не может найти? Я попытался вставить полный путь ко второму файлу, но он все равно не может загрузить файл. Кто-нибудь знает, как я могу загрузить второй файл в первый?Как потребовать рубиновый файл из другого каталога

Заранее спасибо

+0

Вы попробовали 'require 'directory/other_file''? –

+0

Да, я пробовал это. Я дал ему полный путь, но все равно не могу его загрузить – thedarkknight228

+0

try require_relative –

ответ

7

Из документов: она предполагает использование требует относительно. Docs

require_relative дополняет встроенный метод, требуя, чтобы вы могли загрузить файл, относящийся к файлу, содержащему инструкцию require_relative.

Когда вы загружаете файл require, вы обычно получаете доступ к функциям, которые были правильно установлены и доступны в вашей системе. require не предлагает хорошее решение для загрузки файлов в код проекта. Это может быть полезно на этапе разработки, для доступа к тестовым данным или даже для доступа к файлам, которые «заблокированы» внутри проекта, а не предназначены для использования вне офиса.

Например, если у вас есть единичные тестовые классы в каталоге «тест», и данные для них по тесту «тест/данные» каталог, то можно использовать такую ​​строку в тесте:

require_relative "data/customer_data_1" 
44

require будет искать файлы только в нескольких местах, называемых «Путь загрузки». Вы можете просмотреть путь загрузки, используя глобальную переменную $LOAD_PATH в сценарии или сеансе 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, вы можете запустить свой скрипт, добавив местоположение в переменную $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' 

Вот некоторые дополнительные документы от Руби-Doc:

+0

Спасибо за отличный ответ, но только один вопрос, что входит в скобки? Это имя пользователя, имя пользователя и путь к файлу – thedarkknight228

+0

Это был просто пример. Я использовал это как пример домашнего каталога Linux. Так же легко было бы «File.join (« C: »,« Пользователи »,« Чарльз »,« бла-бла ») или даже« File.dirname (__ FILE __) », который добавит папку, в которой находится ваш текущий файл расположенный на пути нагрузки. 'dirname', вероятно, лучше, так как он позволит вам перемещать файл и работать. –

+0

Не требуется ли работать при попытке загрузить файл Rake? – thedarkknight228

6

Также можно сделать так:

require './something.rb' 

из текущего каталога включить.

Смежные вопросы