2010-10-09 17 views
24

Tengo un problema realmente novato con la importación de archivos en Ruby. Estoy haciendo una aplicación Ruby en Windows XP. Todos los archivos de clase para la aplicación están en "C:/Documents/Prgm/Surveyor_Ruby/lib". Pero cuando require un archivo en otro archivo, ni ruby ​​ni irb pueden encontrar el archivo requerido.Ni ruby ​​ni irb pueden cargar el archivo .rb en el directorio actual

el contenido del directorio actual:

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 confirmación de que IRB está en el directorio correcto:

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

... todavía IRB no pueden cargar 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

Además de la solución superior, 'require './Survey'' también habría funcionado. Básicamente, su directorio actual no está realmente en la ruta de búsqueda de forma predeterminada, por lo que debe señalar ruby ​​explícitamente o incluirlo en la ruta de búsqueda. –

Respuesta

2

Creo que las dos publicaciones anteriores son correctas, solo para diferentes usos. En IRB use una ruta absoluta con require, con un archivo también puede usar require con una ruta absoluta, o use require_relative.

9

Noté el mismo comportamiento pero mis raíces de linux me hicieron probar: .\file.rb y se cargó en el irb. Intente declarar explícitamente el directorio actual.

+0

Esto solo funciona si el directorio actual es en el que están ambos archivos. –

3

Es maldita sucia, pero se puede hacer siempre en la primera línea:

$: << '.' 

y te vas con pwd'ed requieren. Es muy útil para realizar pruebas interactiva/creativo con IRB

+0

Gracias por esto. No tengo idea de por qué requerir no funcionaba para mí. –

58

Ninguno de ellos trabajó para mí, pero esto hizo:

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

+1 Esto definitivamente funciona. – WattsInABox

+0

Comprueba también mi solución, está especialmente bien cuando no enciendes irb con '-I .' para establecer' pwd' como el directorio '$ LOAD_PATH'. – Darme

+0

Maravillosa característica de 'irb'! – Dan

1

Si usted está tratando de hacer esto con rvmsudo, encontré esto funcionó para mí :

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

¿Qué tal este comando? Un poco difícil de escribir, pero muy limpia y siempre debería funcionar:

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

o

require_relative 'hede' 

Esto funciona para mí, tanto en Rubí (1.9.3) y JRuby (1.7.x) en linux. No lo he probado en Windows.

Cuestiones relacionadas