2010-10-09 10 views
24

Sto avendo davvero un problema con l'importazione di file in Ruby. Sto creando un'app Ruby in Windows XP. Tutti i file di classe per l'app sono in "C:/Documents/Prgm/Surveyor_Ruby/lib". Ma quando I require un file in un altro file, né ruby ​​né irb possono trovare il file richiesto.Né ruby ​​né irb possono caricare il file .rb nella directory corrente

il contenuto della directory corrente:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir 
Volume in drive C has no label. 
Volume Serial Number is AAAA-BBBB 

Directory of C:\Documents\Prgm\Surveyor_Ruby\lib 

10/09/2010 06:32 PM <DIR>   . 
10/09/2010 06:32 PM <DIR>   .. 
10/08/2010 03:22 PM    5,462 main (commented).rb 
10/08/2010 03:41 PM    92 question.rb 
10/08/2010 09:06 PM    2,809 survey.rb 
10/09/2010 06:25 PM    661 surveyor.rb 
10/08/2010 01:39 PM    1,546 test.rb 
       5 File(s)   10,570 bytes 
       2 Dir(s) 40,255,045,632 bytes free 

La conferma che IRB è in corretta directory:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb 
irb(main):001:0> Dir.pwd 
=> "C:/Documents/Prgm/Surveyor_Ruby/lib" 

... ancora IRB non possono caricare survey.rb:

irb(main):002:0> require 'survey' 
LoadError: no such file to load -- survey 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from (irb):2 
     from C:/Ruby192/bin/irb:12:in `<main>' 
+2

Oltre alla soluzione principale, anche 'require './Survey'' avrebbe funzionato. Fondamentalmente la tua directory corrente non si trova effettivamente nel percorso di ricerca per impostazione predefinita, quindi devi puntare il ruby ​​in modo esplicito o includerlo nel percorso di ricerca. –

risposta

2

Credo che entrambi i post precedenti siano corretti, solo per usi diversi. In IRB utilizzare un percorso assoluto con require, con un file è inoltre possibile utilizzare require con un percorso assoluto oppure utilizzare require_relative.

9

Notato lo stesso comportamento ma le mie radici di linux mi hanno provato: .\file.rb e caricato nell'irb. Prova a dichiarare esplicitamente la directory corrente.

+0

Funziona solo se la directory corrente è quella in cui si trovano entrambi i file. –

3

è dannatamente sporco, ma si può sempre fare alla prima riga:

$: << '.' 

e il gioco è fatto con pwd'ed richiedono. E 'molto utile per il test interattivo/creativo con IRB

+0

Grazie per questo. Non ho idea del perché richiedere non funzionasse per me. –

58

Nessuno di questi ha lavorato per me, ma questo ha fatto:

irb -I . 
>require 'file' 
=> true 
+1

+1 Funziona sicuramente. – WattsInABox

+0

Controlla anche la mia soluzione, è particolarmente bene quando non hai acceso irb con '-I .' per impostare' pwd' come la directory '$ LOAD_PATH'. – Darme

+0

Funzionalità meravigliosa di 'irb'! – Dan

1

Se si sta cercando di fare questo con rvmsudo, ho trovato questo ha funzionato per me :

rvmsudo irb -I '/Absolute/path/to/your/project' 
8

Come su questo comando? Un po 'ingombrante per scrivere ma veramente pulito e dovrebbe sempre lavorare:

 
➜ $ irb 
> require "#{Dir.pwd}/file_to_load.rb" 
=> true 
9
require './hede' 

o

require_relative 'hede' 

Questo funziona per me sia Rubino (1.9.3) e JRuby (1.7.x) su linux. Non l'ho provato su Windows.

Problemi correlati