私のレールアプリでは、オブジェクトを正しく取得するためにシングルトンを使用することにしました。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
誰かが任意のアイデアを持っていますか?