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
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