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
Ответы
Ответ 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'
Ответ 2
Это известная ошибка в ruby:
Если вы используете Pry вместо IRB, это можно устранить, установив pry-require_relative gem.
gem install pry-require_relative
Ответ 3
Это сработало:
require File.expand_path("../login_as_admin_spec.rb", __FILE__)
Ответ 4
require_relative
работает в контексте текущего исходного файла. Это отличается от текущего рабочего каталога. Я не верю, что irb
или pry
имеют представление о понятии "этот текущий исходный файл"; поскольку вы фактически не находитесь в файле.
В этих REPLs просто используйте ссылку относительного пути require './units/login_as_admin_spec.rb'
.