tutorial rugby programas ejemplos ruby irb

ruby - programas - irb rugby



¿Por qué el directorio actual no está en mi ruta Ruby? (3)

Asegúrese de que la variable de entorno "RUBYLIB" esté configurada con todas las rutas de directorio donde encontrará el código personalizado * .rb. Me volvía loco también.

Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna razón por la cual mi directorio de trabajo actual no se encuentre en mi ruta Ruby?

Considerar:

~:499$ irb ruby-1.9.2-p136 :002 > puts $: /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1 /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0 /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1 /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0 /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1 /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0 => nil

Esto realmente me está molestando porque requiere que no esté funcionando como pensé (aunque soy un ruby ​​nuby):

require ''some_file_that_I_know_darn_well_is_in_pwd.rb''

Si añado ''.'' hasta el final, entonces el requerimiento funciona como yo esperaba.

¿Qué me estoy perdiendo?

ACTUALIZAR:

Arg! Ahora estoy recibiendo un nuevo problema. Considerar:

ruby-1.9.2-p136 :010 > `ls` => "start.rb/n" ruby-1.9.2-p136 :011 > require_relative ''start'' LoadError: cannot infer basepath from (irb):11:in `require_relative'' from (irb):11 from /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>''

Ahora que pasa?


En Ruby 1.9.2 los poderes que se introducen un cambio explícito para que el directorio de trabajo ya no está en la ruta de Ruby. Pensé que era el Apocalipsis y algo terrible, hasta que supe sobre require_relative . Mis aplicaciones tienden a verse así:

require ''some_gem'' require ''another_gem'' require_relative ''lib/init''

Y luego lib/init.rb puede tener:

require_relative ''lib1'' # this is lib/lib1.rb require_relative ''lib2'' # this is lib/lib2.rb

Son las rodillas de las abejas, y resuelve todo tipo de problemas que solía tener al requerir el mismo archivo de diferentes directorios de trabajo.

Editar : Desafortunadamente (por razones que no conozco y no he investigado) require_relative no funciona específicamente en irb. Para esto puedes:

  1. haz lo que describiste inicialmente: o $: << ''.'' o $:.unshift ''.'' , o
  2. puede usar load ''myfile.rb'' o require ''./myfile'' lugar:

    irb(main):001:0> Dir[''*.rb''] => ["a.rb", "bar.rb", "foo.rb", "prime.rb", "tmp.rb"] irb(main):002:0> require ''a'' LoadError: no such file to load -- a from <internal:lib/rubygems/custom_require>:29:in `require'' from <internal:lib/rubygems/custom_require>:29:in `require'' from (irb):2 from /usr/local/bin/irb:12:in `<main>'' irb(main):003:0> require_relative ''a'' LoadError: cannot infer basepath from (irb):3:in `require_relative'' from (irb):3 from /usr/local/bin/irb:12:in `<main>'' irb(main):004:0> load ''a.rb'' a => true irb(main):005:0> require ''./a'' a => true


Puede usar require_relative suponiendo que hace lo que necesita.