ruby on rails - migrations - ¿Puede la consola de Rails recargar módulos bajo lib?
ruby on rails run migrations (4)
Agregue lo siguiente a 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 puede volver a cargar todos los archivos en lib
escribiendo reload_lib!
en la consola
Tengo un módulo en mi proyecto Rails bajo lib. Ejecuto ''rails c'' y hago algunos experimentos en la consola. Realizo un cambio en el módulo bajo lib, escribe ''recargar!'' Desde la consola y no vuelve a cargar el archivo. Tengo que salir de la consola y reiniciar, lo que es un verdadero dolor.
¿Hay una mejor manera de volver a cargar ese archivo?
En caso de que alguien esté interesado, he aquí mis conclusiones sobre cómo recargar automáticamente los archivos en Rails sin reiniciar el servidor.
La solución ahora está disponible como Ruby gem require_reloader .
Prueba esto:
load "#{Rails.root}/lib/yourfile.rb"
este es el monkeypatch que podría ayudarte, pégalo en la consola de rieles (o podrías poner este código en un archivo de monkeypatch, aunque no recomiendo el uso de Monkeypatching Object 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 puedes llamar
reload_myself!
en cualquier objeto para recargar su código fuente.