it-swarm.com.ru

Как запросить файл Ruby из другого каталога

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

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

27
thedarkknight228

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'

Вот дополнительная документация от Ruby-Doc:

52
Charles Caldwell

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

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

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

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

require_relative "data/customer_data_1"
9
Bijendra

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

require './something.rb'

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

8
BladeMight

Например, у вас есть файлы:

chess.rb и spec/test.rb

И вы хотите запросить файл в spec/test.rb. Использование: 

require_relative '../test.rb'

с двумя точками. С одной точкой './' у вас будет ошибка "невозможно загрузить такой файл"

0
Alexandr