2011-06-15 14 views
55

Tengo un módulo en mi proyecto Rails lib. Ejecuto 'rails c' y hago algo de experimentación en la consola. Hago un cambio en el módulo bajo lib, tipeo 'reload!' desde la consola y no recarga el archivo. Debo salir de la consola y reiniciar, lo cual es un verdadero dolor.¿La consola Can Rails recarga los módulos bajo lib?

¿Hay una mejor manera de volver a cargar ese archivo?

+0

Esto [pregunta] (http://stackoverflow.com/questions/2129458/automatically-reload-rails-module/2138935 # 2138935) parece tener una solución para su problema –

Respuesta

136

Prueba esto:

load "#{Rails.root}/lib/yourfile.rb" 
+11

Boom-shocka-locka! Justo lo que necesitaba. Gracias, NullRef! –

+0

¡Ningún problema! Tenía la misma frustración. ¡Gracias por aceptar! Me llevé a 200. También iba a volver y te indiqué a 'Guard' [https://github.com/guard/guard](https://github.com/guard/guard) que puede hacer algo impresionante cosas cuando los archivos se cambian. – NullRef

+0

He oído hablar de Guard y es genial. Necesito usar eso en el futuro para volver a cargar archivos javascript, ¡así que gracias por el recordatorio! –

0

este es el monkeypatch que podría ayudarle, pegar esto en la consola carriles (o usted podría poner este código en un archivo monkeypatch - aunque no recomiendo monkeypatching objeto con un método de utilidad):

class Object 
    def self.reload_myself! 
    method = (self.instance_methods(false) + self.methods(false)).select{|method| method.to_s[0] =~ /[A-Za-z]/}.last 
    if method 
     if self.instance_methods(false).index method 
     method = self.instance_method(method) 
     elsif 
     method = self.method(method) 
     end 

     if (method.source_location) 
     source_location = method.source_location[0] 
     puts "reloading: #{source_location}" 
     load "#{source_location}" 
     else 
     puts "could not reload #{self.name}" 
     end 
    end 
    end 
end 

y se puede llamar

reload_myself! 

en cualquier objeto para recargar su código fuente.

-1

Agregue lo siguiente al config/initializers/reload.rb

class Object 
    def reload_lib! 
    Dir["#{Rails.root}/lib/**/*.rb"].map { |f| [f, load(f) ] } #.all? { |a| a[1] } 
    # uncomment above if you don't want to see all the reloaded files 
    end 
end 

Ahora se puede volver a cargar todos los archivos de lib escribiendo reload_lib! en la consola

Cuestiones relacionadas