ruby-on-rails - rails 。在开发模式下预加载类

标签 ruby-on-rails caching model memcached preload

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

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

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

最佳答案

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

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

这将强制在缓存语句之前重新加载用户模型。如果您有一个包含多个缓存语句的类,您可以这样做:

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

关于ruby-on-rails - rails 。在开发模式下预加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013773/

相关文章:

laravel - 永久缓存,包括服务器重启和 redis 到磁盘功能

database - 来自值组合的值 - 数据库设计

ruby-on-rails - 在一个方法中传递时,使变量在 Controller 的所有方法中可用

ruby-on-rails - rails : How to start thin server in ssl

ruby-on-rails - Rails 在生产中出现 Apache+passenger 错误

wpf - 如果我创建一个 ViewModel,我是否需要以 MVVM 模式为其创建模型?

python - 在 Django 模型中存储图像列表

mysql - 从给定编号所属的表中选择所有记录

Android - 绘图缓存 - 什么时候有用?

android - Android 中的 EhCache 用于缓存位图图像?