almaceno un valor en una variable de clase dentro de un módulo, tales como:módulo se vuelve a cargar cada petición se pierden datos, de modo inicializados
module TranslationEnhancer
def self.install! klass
@dictionaries ||= [] << klass
end
...
end
llamo esto desde un inicializador en config/inicializadores:
require Rails.root + "lib" + "translation_enhancer.rb"
TranslationEnhancer::install! TranslationDictionary
Ahora, si inicio el servidor en el entorno de desarrollo, todo está bien durante la primera solicitud. Sin embargo, después de esa solicitud, @dictionaries es repentinamente nulo. He comentado todos los demás códigos en TranslationEnhancer, así que estoy absolutamente seguro de que todo el módulo debe volver a cargarse cada vez que hago una solicitud.
Traté de mover el módulo fuera del directorio lib (movido a lib_unloadable), entonces intenté:
ActiveSupport::Dependencies.explicitly_unloadable_constants << "TranslationEnhancer"
pero volvió a fallar. No tengo idea de cómo resolver esto, por favor ayuda.
Got Ruby 1.9.2 @ Rails 3.1.rc4.
EDIT: Sé que podría establecer los diccionarios como una constante. Pero me gustaría utilizar TranslationEnhancer como una biblioteca - por lo que podía usar sin cambios en un proyecto diferente e instalar diferentes directorios, tales como:
TranslationEnhancer.install! EnglishDirectory, FrenchDirectory
Estos valores won'd cambian durante el tiempo de ejecución, que se acaba de cambiar proyecto para proyectar.
Bueno, es una característica, no un error :-) No pude resistir, lo siento por eso. – mliebelt
¿Por qué no define una constante dentro de un inicializador de esa manera usted podría acceder a él por su nombre en todas las aplicaciones? ¿Necesita cambiar el valor durante el tiempo de vida de la aplicación? –
puede definir una constante como un hash y cambiar su valor de contenido cuando lo necesite (aún buscando una mejor solución) – apneadiving