获取错误在Rails中使用memcached时无法修改冻结对象

Tim*_*Tim 0 memcached caching ruby-on-rails ruby-on-rails-3

我遇到了memcached的问题.

我在这里使用Gregg Pollack的例子http://railslab.newrelic.com/2009/02/19/episode-8-memcached

post.rb

def self.recent
    Rails.cache.fetch('recent_posts', :expires_in => 15.minutes) do
        self.order('id DESC').limit(15)
    end
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我调用它@posts = Post.recent并将其写入缓存.如果我重新加载页面,我会收到错误TypeError: can't modify frozen object.

我在控制台中尝试了同样的事情,我得到了同样的错误.第一次执行时@posts = Post.recent,密钥recent_posts被添加到缓存中.当我第二次执行相同的命令时,我得到了冻结的错误.

我正在使用Rails 3.0.1并在开发模式下工作.

我在这里做错了吗?

谢谢!

蒂姆

Ari*_*jan 7

您正在缓存排序选项,而不是任何实际结果.当您执行查询时,Rails会修改您的查询选项,这是行不通的,因为从缓存中的东西被认为是不可变的.

试试这个:

def self.recent
  Rails.cache.fetch('recent_posts', :expires_in => 15.minutes) do
    self.order("id DESC").limit(15).all
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,您将存储一系列帖子,以后可以使用.