2016-09-14 4 views
2

私のレールアプリでは、オブジェクトを正しく取得するためにシングルトンを使用することにしました。Railsのシングルトンが開発リロード後に空になった

設定/初期化子/ registry.rb:

registry = Registry.instance 

registry.define_lazy :period_predictor do 
    PeriodPredictor.new(NotificationBuilder.new, 28, 4, 3) 
end 

registry.define_lazy :notification_sender do 
    NotificationSender.new 
end 

のlib/registry.rb:

# Registry class which is singleton and stores values. 
class Registry 
    include Singleton 


    # Define simple value. Like a constant. 
    # 
    # @param key [Symbol] 
    # @param value 
    def define(key, value) 
    container[key] = value 
    end 


    # Define value (block required) which will be calculated when it will be need. 
    # It will calculate it every time when it will be needed. 
    # 
    # @param key [Symbol] 
    # @param block [Proc] 
    def define_lazy(key, &block) 
    container[key] = LazyValue.new(&block) 
    end 


    # Get value. 
    # 
    # @param key [Symbol] 
    # 
    # @return 
    def get(key) 
    value = container[key] 
    if value.is_a?(LazyValue) 
     value = value.call 
    end 

    value 
    end 


    # Get value (hash access). 
    # 
    # @param key [Symbol] 
    # 
    # @return 
    def [](key) 
    get(key) 
    end 


    # Export all the values. 
    # Replacing values of returned hash won't change registry. 
    # 
    # @return [Hash] 
    def export 
    container.clone 
    end 


    # Import hash data to registry 
    # 
    # @param data [Hash] 
    def import(data) 
    data.each do |key, value| 
     @container[key] = value 
    end 
    end 


    private 

    # Get container. 
    # 
    # @return [Hash] 
    def container 
    @container ||= {} 
    end 


    # Class to store lazy value. 
    class LazyValue 
    def initialize(&block) 
     @block = block 
    end 

    def call 
     @block.call 
    end 
    end 
end 

すべてが生産に正常に動作します。しかし、私が何かを変更すると(どこかにスペースを追加しても)、コントローラでシングルトンからデータを取得することはできません。 [:period_predictor]

Registry.instanceだけで新鮮なレジストリのインスタンスと Registry.instanceになった私はシングルトンで離れて行くとクラスメソッドを作る時になったゼロ

同じことが起こります。

それは私がシングルトンをオフにして、定数を作成する場合にのみ、この事をしない:なぜこれが起こっている

registry = Registry.new 

registry.define_lazy :period_predictor do 
    PeriodPredictor.new(NotificationBuilder.new, 28, 4, 3) 
end 

registry.define_lazy :notification_sender do 
    NotificationSender.new 
end 

REGISTRY = registry 

Railsのバージョン4.2.5.1

誰かが任意のアイデアを持っていますか?

答えて

関連する問題