¿Cómo puedo recargar un script en IRB?


Estoy escribiendo un script Ruby para usar en el entorno Rails, pero elegí ejecutarlo desde irb porque recargar la consola de Rails puede ser una molestia. Ahora el tiempo de espera es mucho más corto de irb, pero me molesta que tengo que reiniciar irb y requerir el script cada vez que hago un cambio. ¿Hay una forma más sencilla de recargar un script desde irb?

Encontré un método en este hilo, pero eso solo se aplica a los archivos gem aparentemente. Mi declaración require parece esto

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

EDITAR: Habiendo intentado load en lugar de require, todavía no pude hacerlo funcionar. No puedo detener 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
 57
Author: Community, 2011-01-08

4 answers

En irb, File.expand_path(__FILE__)} simplemente devolverá "#{path you ran irb from}/(irb)". Lo que crea un camino que en realidad no existe. Afortunadamente, todas las rutas de archivo son relativas a donde ejecutó irb de todos modos. Esto significa que todo lo que necesita es:

load "lib/query.rb"

Si desea usar el __FILE__ en un archivo real, está bien, pero no espere que produzca una ruta válida en irb. Debido a que un irb no hay "archivo" en absoluto, por lo que no puede devolver la ruta válida en absoluto.

También, __FILE__ funcionará bien si se usa en un archivo cargado en irb a través de load o require. Porque para eso es.

 89
Author: Alex Wayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-08 10:58:07

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

 35
Author: vonconrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-08 03:03:01

De acuerdo con este enlace necesita cargar su archivo y no olvide la extensión.

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

Es posible que desee probar hashing fuera de por qué su consola de rails no está funcionando para usted sin embargo.

 3
Author: pjammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-08 03:07:42

Creo que load es lo que estás buscando.

 1
Author: lukad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-08 03:04:33