2013-05-07 7 views
17

Sono attualmente inrubino require_relative dà LoadError: non si può dedurre BasePath all'interno IRB

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

posso andare in IRB e richiedono un file, ma è un tempo molto lungo richiedono ...

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

I voglio usare require_relative, come in

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

ma ottengo:

012.
LoadError: cannot infer basepath 
+0

c'è stata qualche discussione su quella a:. Https://bugs.ruby-lang.org/issues/4487 –

risposta

29

require_relative richiede un file relativo al file la chiamata a require_relative è nella chiamata a require_relative non è in alcun file, è l'interprete interattivo, quindi doesn'. lavoro.

È possibile utilizzare la lunga forma di require passando esplicitamente il percorso completo:

require './units/login_as_admin_spec.rb' 

Oppure aggiungere la directory corrente al $LOAD_PATH e proprio require come al solito:

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

L'ultima opzione ha funzionato come una magia. Grazie! –

2

require_relative funziona nel contesto del file sorgente corrente. Questo è diverso dalla directory di lavoro corrente. Non credo che irb o pry comprendano il concetto di "questo file sorgente corrente"; dal momento che non sei effettivamente in un file.

In questi REPLs, utilizzare solo un riferimento di percorso relativo require './units/login_as_admin_spec.rb'.

+0

non ha funzionato, non riusciva a trovare il file, provato '/ units',' unità', '../ unità' e nessuna ha funzionato. –

+0

@MichaelDurrant qual è stato l'errore e la riga di codice che hai digitato? Funziona, l'ho fatto più volte. –

+0

fa, vedi il commento di @ gawin, sopra. –

4

questo ha funzionato:

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

Quale versione di Ruby sei? –

+2

Se si esegue solo 'File.expand_path (" ../ login_as_admin_spec.rb ", __FILE __)' si dovrebbe vedere '__FILE__' get ignorato e si ottiene il percorso completo di proprio come' File.expand_path ("./ login_as_admin_spec.rb ")' –