2011-01-09 5 views
0

自分自身を初期化するのに時間がかかるクラスXがあります。私はそのクラスをシングルトンにして、レールのアプリケーションを開始するときに強制的に作成したいと思っています。熱心な初期化を伴うシングルトン

私はシングルトンを作った:

 
class X 
    @@instance = nil 

    def self.instance 
    if @@instance.nil? 
     @@instance = X.new 
     puts 'CREATING' 
    end 

    return @@instance 
    end 

    private_class_method :new 
end 

問題は、私はこのクラスを使用するたびに、私はログに「作成」を参照のことです。私はinitializersディレクトリにクラスの作成を入れようとしましたが、どちらもうまくいきません。

+0

どのようにクラスを使用していますか?私たちに見せてください。 'self.instance'は実際にインスタンスを返すようには見えません。 –

+0

私の間違いを修正しました。これは、モデルの1つのメソッドで使用するユーティリティクラスです。 'require'をモデルに追加して単純に' X.instance.do_something' – jesper

+0

'initializers'ディレクトリに初期化を置くと、クラスへの最初の呼び出しは正しいものでした。新しいオブジェクトは作成されませんでした。しかし、2番目の呼び出しは新しいオブジェクトの作成を引き起こした... – jesper

答えて

1

問題は、開発環境のRailsはクラスをキャッシュせず、アプリケーションコードがリクエストごとに再ロードされるという問題でした。

関連する問題