Ruby on rails 轨道。在开发模式中预加载类

Ruby on rails 轨道。在开发模式中预加载类,ruby-on-rails,caching,model,memcached,preload,Ruby On Rails,Caching,Model,Memcached,Preload,在开发模式中预加载Rails模型的正确方法是什么 背景:Rails 2.2,memcahe作为缓存存储 当Rails以生产模式启动时,它首先预加载和缓存所有模型。 在开发模式中,它使用laizy加载。这就是为什么我们要将任何模型存储到rails缓存中,例如,在应用程序的下一个loadind上的rails.cache.write(“key”,User.find(0)),当我们尝试执行rails.cache.read(“key”)memcache fire时,该用户是未知的类/模块。在这种情况下,预

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

背景:Rails 2.2,memcahe作为缓存存储

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

您可以通过执行以下操作来解决此问题:

User if Rails.env == 'development'
@user = Rails.cache.fetch("key"){ User.find(0) }
这将强制在cache语句之前重新加载用户模型。如果您有一个包含多个缓存语句的类,则可以执行以下操作:

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