轨。在开发模式下预加载类

时间:2011-02-16 07:44:58

标签: ruby-on-rails caching model memcached preload

在开发模式下预加载Rails模型的正确方法是什么?

背景:Rails 2.2,memcahe as cache store。

当Rails首先在生产模式下启动时,它会预加载并缓存所有模型。 在开发模式下,它使用laizy加载。这就是为什么我们将任何模型存储到rails缓存中,例如,当我们尝试执行Rails.cache.read(“key”时,应用程序的下一个loadind上的Rails.cache.write(“key”,User.find(0)) )memcache fire,即User是未知的类/模块。在这种情况下预加载课程的正确方法是什么?

1 个答案:

答案 0 :(得分: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']。当然,您的另一个选择是在开发环境中简单地禁用缓存,然后您根本不必处理这个问题。