J'ai un module dans mon application Rails qui vit dans/libarrêt Rails de déchargement d'un module en mode développement
module MyModule
mattr_accessor :the_variable
class << self
def setup
yield this
end
end
end
De mon fichier environments/#{RAILS_ENV}.rb
je peux alors définir une valeur spécifique à l'environnement pour the_variable
:
MyModule.setup do |my_module_config|
my_module_config.the_variable = 42
end
Ceci est charmant, et il semble fonctionner (presque) bien.
Le problème est que, en mode développement, Rails via ActiveSupport::Dependencies
décharge une charge de modules et les recharge à temps pour la nouvelle demande. C'est généralement un bon comportement car cela signifie que vous n'avez pas besoin de redémarrer votre serveur localhost lorsque vous modifiez du code.
Toutefois, cela efface également ma variable the_variable
initialisée, et lorsque la requête suivante arrive dans l'initialiseur (évidemment), elle n'est pas réexécutée. L'effet net est que les demandes suivantes finissent par avoir MyModule.the_variable
mis à nil
plutôt que le 42
que je cherche. J'essaye de trouver comment arrêter Rails déchargeant mon module à la fin de la demande, ou alternativement trouver une autre manière de fournir proprement la configuration spécifique d'environnement pour mes modules.
Des idées? : -/
Je suis sûr que j'ai déjà essayé, mais je l'ai encore essayé et ça semble fonctionner parfaitement maintenant – Gareth