2012-06-27 13 views
15

Me estoy acostumbrando a la consola de Rails, y me resulta útil para probar rápidamente los métodos en mis clases. Sé que puedo hacer cambios a mis modelos, a continuación,¿Cuáles son los motivos de "recarga"? no siempre parece funcionar en la consola de Rails?

> reload! 

para agarrar esos cambios, pero a veces me parece que no parece para recargar mi último código. ¿Rails guarda el código de caché en alguna parte?

En un ejemplo muy simple de pseudo, que puede tener mal código en la línea 100:

100: u = User.alll 

y en la consola de Rails, cuando corro este método, podría obtener un error similar al siguiente:

NoMethodError: undefined method `alll' for User:Class ... on line 100 

a continuación, modificar mi código, corregir el error

100: u = User.all 

vuelva a cargar:

> reload! 

y luego, al llamar al método de esta clase que tiene el código correcto, todavía va a decir

NoMethodError: undefined method `alll' for User:Class ... on line 100 

Cuando claridad, se fija el error y la línea en cuestión no es ni siquiera en la línea 100 más. ¿Hay alguna manera de forzar/restaurar la "recarga"? ¿mando?

Respuesta

22

Mi conjetura sería que usted está haciendo algo como:

  1. crear una instancia de User
  2. llamada someMethod en la instancia
  3. se produce un error, y que ir y fijarlo
  4. reload!
  5. se llama a someMethoden la instancia existente y obtener el error nuevamente

Así que está llamando al método en una instancia que no se ha vuelto a cargar. Su clase se ha vuelto a cargar, pero la instancia ya está en la memoria, con errores y todo.

Esa sería mi suposición al menos (no 100% seguro).

El punto es, si crea una nueva instancia después de el reload! y llama a su método en esa nueva instancia, debe dejar de quejarse.

+0

Sí, este fue exactamente el problema. Las instancias que creas no "vuelven a cargar". Después de volver a cargar y volver a crear instancias, las cosas funcionan bien cada vez. Gracias @flambino – jbnunn

Cuestiones relacionadas