2012-02-06 29 views
19

Cuando yo requiero un archivo, por ejemplo (llamado st.rb):rubí LoadError: no se puede cargar dicho archivo

require 'rubygems' 
require 'mongrel' 

class TestHandler < Mongrel::HttpHandler 

    def process(request, response) 
    response.start(200) do |head, out| 
     head["Content-Type"] = "text/html" 
     out.write "Hello, World!\n" 
    end 
    end 

end 

en IRB me sale:

>> require 'st.rb' 
LoadError: cannot load such file -- st.rb 
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from (irb):3 
    from /usr/local/bin/irb:12:in `<main>' 

que podría tener una pista, pero es solo una suposición. Mi versión de rubí/ubicación de instalación es:

/usr/local/bin/ruby y ruby 1.9.3p0

sin embargo, las gemas de rubí es en /usr/local/lib/ruby/1.9.1 y se está hablando de la versión 1.9.1. ¿Podría ser esta la razón?

Gracias!

ACTUALIZACIÓN extraño, cuando escribo 'pone RUBY_VERSION' en IRB, me sale esto:

puts RUBY_VERSION 
1.9.3 
NoMethodError: undefined method `write' for nil:NilClass 
    from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `printf' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `output_value' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:160:in `block (2 levels) in eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:273:in `signal_status' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:155:in `eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:70:in `block in start' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `catch' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `start' 
    from /usr/local/bin/irb:12:in `<main>' 
Maybe IRB bug! 
>> 
+0

¿Qué pasa si simplemente 'requiere' st''? –

+0

@MatthewLehner lo mismo – 0xSina

+0

Posible duplicado de [¿Por qué no está el directorio actual en mi ruta de Ruby?] (Http://stackoverflow.com/questions/4965556/why-isnt- current-directire-on-my-ruby-path); ver mi respuesta en esa pregunta para las soluciones. – Phrogz

Respuesta

16

el directorio donde está más probable no en su camino de carga st.rb vidas.

Suponiendo que st.rb se encuentra en un directorio llamado lib en relación con donde se invoca irb, se puede añadir que lib directorio a la lista de directorios que Ruby utiliza para cargar las clases o módulos con esto:

$: << 'lib' 

Por ejemplo, para llamar al módulo llamado 'foobar' (foobar.rb) que vive en el directorio lib, necesitaría primero agregar el directorio lib a la lista de la ruta de carga. Aquí, sólo estoy añadiendo el directorio lib a mi trayectoria de carga:

irb(main):001:0> require 'foobar' 
LoadError: no such file to load -- foobar 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
     from (irb):1 
irb(main):002:0> $: 
=> ["/usr/lib/ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i386-cygwin", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i386-cygwin", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i386-cygwin", "."] 
irb(main):004:0> $: << 'lib' 
=> ["/usr/lib/ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i386-cygwin", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i386-cygwin", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i386-cygwin", ".", "lib"] 
irb(main):005:0> require 'foobar' 
=> true 

EDITAR Lo siento, se perdió por completo el hecho de que está utilizando el rubí 1.9.x. Todas las cuentas de informar que su current working directory has been removed from LOAD_PATH for security reasons, por lo que tendrá que hacer algo como en irb:

$: << "." 
+0

Actualmente estoy cd'ed en el directorio en el que reside st.rb. Esto funcionaba bien hasta ayer cuando decidí actualizar ruby ​​a 1.9.3 – 0xSina

8

El problema se habrá solucionado si especifica su ruta.

p. Ej.

"require 'st.rb'" -> "require './st.rb'"

ver si su problema se soluciona o no.

+0

Thx. Llegué a través del problema cuando trabajaba en las muestras de AWS. De hecho, si tratamos de hacer coincidir la versión de ruby ​​cuando el código de muestra, el problema puede desaparecer. –

1

Acabo de encontrarme con un problema similar. Pruebe

require './st.rb' 

Esto debería hacer el truco.

Cuestiones relacionadas