20

我目前在

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
4

4 回答 4

31

require_relative需要一个相对于调用所在文件的文件require_relative。您的调用require_relative不在任何文件中,它在交互式解释器中,因此它不起作用。

require您可以通过显式传递完整路径来使用长形式:

require './units/login_as_admin_spec.rb'

或者像往常一样将当前目录添加到$LOAD_PATHand中:require

$LOAD_PATH << '.'
require 'units/login_as_admin_spec'
于 2013-05-07T21:04:27.057 回答
6

这是 ruby​​ 中的一个已知错误:

如果您使用 Pry 而不是 IRB,则可以通过安装pry-require_relative gem来解决此问题。

gem install pry-require_relative
于 2013-08-19T06:21:01.913 回答
4

这有效:

require File.expand_path("../login_as_admin_spec.rb", __FILE__)
于 2013-05-07T15:10:58.923 回答
2

require_relative在当前源文件的上下文中工作。这与当前工作目录不同。我不相信irbpry不了解“当前源文件”的概念;因为您实际上不在文件中。

在这些REPL中,只需使用相对路径引用require './units/login_as_admin_spec.rb'

于 2013-05-07T14:40:44.417 回答