2014-05-14 3 views
1

Il existe an answer to the question sur la façon de rendre les classes du dossier lib rechargées en mode développement sans avoir à redémarrer le serveur et à travailler partiellement.Rechargement automatique des classes dans le dossier lib provoque une dépendance circulaire détectée lors de la constante de chargement automatique

Donc, j'ai inséré les lignes suivantes dans le fichier development.rb:

ActiveSupport::Dependencies.autoload_paths << File::join(Rails.root, 'lib') 
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(['MyClass1', 'MyClass2']) 

et oui, la classe est rechargée sur le premier changement de source, mais sur le deuxième changement je reçois une exception:

Circular dependency detected while autoloading constant MyClass2 

Pourquoi l'exception est levée environ MyClass2 et non MyClass1? Parce que je l'instancie directement, et MyClass1 est utilisé par MyClass2 plus tard.

Voici un code:

Les classes lib\my_class1.rb:

require 'httpclient/include_client' 

class MyClass2 
    attr_reader :id, :login, :money, :info 

    def initialize(parameters) 
    @id = parameters['idUsers'] 
    @login = parameters['login'] 
    @money = parameters['money'] 
    @info = parameters['info'] 
    end 
end 

class MyClass1 
    def initialize(parameters) 
    @base_url = parameters[:base_url] 
    @version = parameters[:version] 
    end 

    def get_test_data 
    { huhu: "testvalue7"} 
    end 
end 

Controller:

require 'my_class1' 

class MyClassTestController < ApplicationController 
    skip_before_filter :authenticate_user! 

    def get_test_data_test 
    ls = MyClass1.new({ base_url: 'http://192.168.0.25', version: '1'}) 
    @res = ls.get_test_data 
    end 
end 

Répondre

1

Hey Paul grâce à la mise à jour mais je ne l'ai pas trouvé une erreur dans votre code .. Pouvez-vous s'il vous plaît vérifier ce lien, il peut vous aider à résoudre votre problème. http://teohm.com/blog/2013/01/10/reload-required-files-in-rails/

+0

Il n'y a pas de code dans les modèles. Ou vous considérez qu'une classe dans le dossier lib est aussi un modèle? J'ai mis à jour la question. P.S. Vous devez comprendre que dès qu'une réponse acceptée apparaît ici, cette réponse avec tous ses commentaires doit être supprimée. Et je souhaite que la réponse acceptée soit la vôtre, ainsi vous obtiendrez votre élévation de réputation honnêtement. – Paul

Questions connexes