【问题标题】:Rails. Preloading class in Development mode导轨。在开发模式下预加载类
【发布时间】:2011-06-28 04:17:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2015-04-29
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多