2011-01-08 21 views
54

Estoy escribiendo un script de Ruby para usar en el entorno de Rails, pero decidí ejecutarlo desde irb porque volver a cargar la consola de Rails puede ser una molestia. Ahora el tiempo de espera es mucho más corto que el de irb, pero me molesta tener que reiniciar iRb y requerir el script cada vez que realizo un cambio. ¿Hay alguna forma más sencilla de volver a cargar un script desde irb?¿Cómo puedo volver a cargar un script en IRB?

Encontré un método en this thread, pero eso solo se aplica a los archivos gem al parecer. Mi requerirá declaración se parece a esto

require "#{File.expand_path(__FILE__)}/../lib/query" 

EDIT: Después de haber probado load en lugar de require, todavía no podía conseguir que funcione. No puedo detenerme en estos errores.

ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb" 
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb 

Respuesta

84

En irb, File.expand_path(__FILE__)} acaba de devolver "#{path you ran irb from}/(irb)". Lo cual crea una ruta que en realidad no existe. Afortunadamente, todas las rutas de archivos están relacionadas con el lugar donde ejecutó IRB de todos modos. Esto significa que todo lo que necesita es:

load "lib/query.rb" 

Si desea utilizar el __FILE__ en un archivo real, eso está bien, pero no esperes que produzca una ruta válida en el IRB. Debido a que un irb no hay ningún "archivo" en absoluto, entonces no puede devolver un camino válido en absoluto.

Además, __FILE__ funcionará bien si se utiliza en un archivo cargado en irb por carga o requiere. Porque eso es para lo que es.

34

En lugar de utilizar require, tratar load. El primero solo carga un archivo fuente una vez, mientras que el segundo lo carga cada vez que lo llamas.

+1

He intentado cargar pero sigue quejándose de que no puede encontrar el archivo, y puse la extensión rb al final de la línea. – picardo

+0

Como referencia, consulte "Ruby Require VS Load VS Include VS Extend" - http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/ – Purplejacket

1

Creo que load es lo que estás buscando.

+1

Intenté ' load' pero sigue quejándose de que no puede encontrar el archivo, y puse la extensión rb al final de la línea. – picardo

+1

Intenta poner la extensión del archivo – hyeomans

3

según this link necesita cargar su archivo y no se olvide de la extensión.

Aquí hay una versión más elegante para usar también en this link number 2 que podría ser útil para usted también.

Es posible que desee intentar explicar por qué su consola de rieles no funciona para usted.

+0

La consola Rails simplemente demora demasiado en cargarse. Intenté 'cargar' pero sigue quejándose de que no puede encontrar el archivo, y coloqué la extensión rb al final de la línea. – picardo

+0

si este archivo está dentro de su directorio lib, luego se carga y puede/debería ser capaz de usarlo, a menos que vomite errores al iniciarse. Para usarlo en otro archivo, solo necesita agregar 'require NameOfModuleOrClass' (que está dentro de ese archivo de consulta), a uno de los archivos en su aplicación de rieles. – pjammer

Cuestiones relacionadas