2013-05-07 12 views
17

Jestem obecnie wrubin require_relative daje LoadError: nie można wywnioskować basePath wewnątrz IRB

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

mogę iść do IRB i wymaga pliku, ale jest to naprawdę długo wymagać ...

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

I chcesz używać require_relative, jak w

$ 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' 

ale otrzymuję:

LoadError: cannot infer basepath 
+0

Odnotowano pewną dyskusję na ten temat na stronie:. Https://bugs.ruby-lang.org/issues/4487 –

Odpowiedz

29

require_relative wymaga pliku krewnego do pliku wywołanie require_relative jest w twoich wywołanie require_relative nie jest w dowolnym pliku, to w interaktywnym interpretera, dlatego nie robi”. t działa.

Można użyć długiej formy require jawnie przekazując pełną ścieżkę:

require './units/login_as_admin_spec.rb' 

Albo dodać bieżący katalog na $LOAD_PATH i tylko require jak zwykle:

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

Ostatnia opcja działa jak magia. Dzięki! –

2

require_relative działa w kontekście bieżącego pliku źródłowego. To różni się od bieżącego katalogu roboczego. Nie wierzę, że irb lub pry mają zrozumienie pojęcia "tego pliku źródłowego"; ponieważ nie jesteś w pliku.

W tych REPLs wystarczy użyć odniesienia ścieżki względnej require './units/login_as_admin_spec.rb'.

+0

nie działa, nie może znaleźć pliku, próbował '/ units',' units', '../ units' i żaden nie działał. –

+0

@MichaelDurrant jaki był błąd i wiersz kodu, który wpisałeś? To działa, zrobiłem to wiele razy. –

+0

pry does, patrz komentarz @ gawin, powyżej. –

4

To działało:

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

W której wersji Ruby jesteś? –

+2

Jeśli uruchomisz tylko 'File.expand_path (" ../ login_as_admin_spec.rb ", __FILE __)' powinieneś zobaczyć '__FILE__' get's ignored i otrzymasz pełną ścieżkę podobną do' File.expand_path ("./ login_as_admin_spec.rb ")' –