62 votes

Peut Rails console de recharger en vertu de la lib?

J'ai un module dans mon Rails de projet dans lib. Je run 'rails c' et faire quelques tests dans la console. - Je modifier le module lib, de type "recharger!" de la console et qu'il n'a pas de recharger le fichier. Je dois quitter la console et redémarrer, ce qui est une vraie douleur.

Est-il un meilleur moyen de recharger ce fichier?

155voto

NullRef Points 2318

Essayez ceci:

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

2voto

Huiming Teo Points 124

Dans le cas où toute personne intéressée, voici mes conclusions sur la façon de recharge automatique nécessitent des fichiers dans les Rails sans redémarrer le serveur.

La solution est maintenant disponible comme un Rubis gemme require_reloader.

0voto

Wouter Vegter Points 611

c'est le monkeypatch qui pourrait vous aider, collez ceci dans la console rails (ou vous pouvez placer ce code dans un monkeypatch fichier - bien que je ne recommande pas monkeypatching Objet 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.

0voto

Abdo Points 3360

Ajoutez ce qui suit à l' config/initializes/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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: