J'ai un module dans mon projet Rails sous lib. Je lance 'Rails c' et fais des expériences dans la console. Je modifie le module sous lib, tapez 'reload!' à partir de la console et il ne recharge pas le fichier. Je dois quitter la console et redémarrer, ce qui est très pénible.
Existe-t-il un meilleur moyen de recharger ce fichier?
Essaye ça:
load "#{Rails.root}/lib/yourfile.rb"
Au cas où cela intéresserait, voici mes conclusions sur comment recharger automatiquement les fichiers requis dans Rails sans redémarrer le serveur.
La solution est maintenant disponible sous forme de gem Ruby require_reloader .
Ajouter ce qui suit à 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
Vous pouvez maintenant recharger tous les fichiers dans lib
en tapant reload_lib!
dans la console.
ceci est le monkeypatch qui pourrait vous aider, collez-le dans la console Rails (ou vous pouvez mettre ce code dans un fichier monkeypatch - bien que je ne recommande pas monkeypatching Object avec une méthode utilitaire):
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
et vous pouvez appeler
reload_myself!
sur n'importe quel objet pour recharger son code source.