Подтвердить что ты не робот

Ruby require_relative дает LoadError: не может вывести базовый путь внутри IRB

Я сейчас в

Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/units/

Я могу войти в irb и потребовать файл, но он действительно требует...

require '/home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/units/login_as_admin_spec.rb'
=> true

Я хочу использовать require_relative, как в

$ cd /home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/
$ pwd
/home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day
$ irb
irb(main):001:0> require_relative 'units/login_as_admin_spec.rb' 

но я получаю:

LoadError: cannot infer basepath
4b9b3361

Ответ 1

require_relative требуется файл, относящийся к файлу, в который входит вызов require_relative. Вызов require_relative отсутствует в любом файле, это в интерактивном интерпретаторе, поэтому оно не работает.

Вы можете использовать длинную форму require, явно передавая полный путь:

require './units/login_as_admin_spec.rb'

Или вы добавляете текущий каталог в $LOAD_PATH и просто require, как обычно:

$LOAD_PATH << '.'
require 'units/login_as_admin_spec'

Ответ 3

Это сработало:

require File.expand_path("../login_as_admin_spec.rb", __FILE__)

Ответ 4

require_relative работает в контексте текущего исходного файла. Это отличается от текущего рабочего каталога. Я не верю, что irb или pry имеют представление о понятии "этот текущий исходный файл"; поскольку вы фактически не находитесь в файле.

В этих REPLs просто используйте ссылку относительного пути require './units/login_as_admin_spec.rb'.