web-dev-qa-db-ja.com

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
20
Michael Durrant

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'
31
Jörg W Mittag

これはRubyの既知のバグです。

IRBの代わりにPryを使用している場合、これは pry-require_relative gem をインストールすることで修正できます。

gem install pry-require_relative
6
Gawin

これはうまくいきました:

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

require_relativeは、現在のソースファイルのコンテキストで機能します。これは、現在の作業ディレクトリとは異なります。 irbまたはpryが「この現在のソースファイル」の概念を理解しているとは思いません。あなたは実際にはファイルにいないので。

これらの REPLs では、相対パス参照require './units/login_as_admin_spec.rb'を使用するだけです。

2
Aaron K