2011-02-16 13 views
2

開発モードでRailsモデルをプリロードする正しい方法は何ですか?Rails。開発モードでクラスをプリロードする

背景:Rails 2.2、キャッシュストアとしてのmemcahe。

レールが本番モードで起動すると、最初にすべてのモデルがプリロードされキャッシュされます。 開発モードでは、レイジーローディングを使用します。 Rails.cache.read( "key")を実行しようとすると、アプリケーションの次の読み込み時にRails.cache.write( "key"、User.find(0))のように、 )memcache fire、そのUserはclass/moduleが不明です。この状況でクラスをプリロードする正しい方法は何ですか?

答えて

3

あなたはこのような何かを行うことによってこの問題を回避することができます

User if Rails.env == 'development' 
@user = Rails.cache.fetch("key"){ User.find(0) } 

これは、キャッシュ文の前に再ロードするUserモデルを強制します。あなたが複数のキャッシュステートメントを持つクラスを持っている場合は、これを行うことができます:あなたはRailsの2.xのであるならば

class SomeController 
    [User, Profile, Project, Blog, Post] if Rails.env == 'development' 

    def show 
    @user = Rails.cache.fetch("user/#{params[:user_id]") do 
     User.find(params[:user_id]) 
    end 
    end 
end 

をしてRails.envが動作しません。あなたはいつもの代わりRAILS_ENVまたはENV [「RAILS_ENV」]を使用することができます。もちろん、あなたの他の選択肢は、あなたの開発環境で単にキャッシングを無効にすることです。そして、あなたはこの問題にまったく対処する必要はありません。

関連する問題