2

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

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

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

4

1 に答える 1

3

次のようなことを行うことで、これを回避できます。

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

これにより、キャッシュ ステートメントの前に User モデルが強制的に再ロードされます。複数のキャッシュステートメントを持つクラスがある場合、これを行うことができます:

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 2.x を使用していて Rails.env が機能しない場合は、代わりに RAILS_ENV または ENV['RAILS_ENV'] をいつでも使用できます。もちろん、他のオプションは、開発環境でキャッシュを単に無効にすることです。そうすれば、この問題にまったく対処する必要はありません。

于 2011-02-16T07:53:51.420 に答える