繁体   English   中英

在Rails中使用Memcached时出错,无法修改冻结对象

[英]Getting error Can't Modify Frozen Object while using memcached in Rails

我对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

在我的控制器中,我使用@posts = Post.recent对其进行调用,并将其写入缓存。 如果重新加载页面, TypeError: can't modify frozen object出现错误TypeError: can't modify frozen object

我在控制台中尝试了相同的操作,但得到了相同的错误。 我第一次执行@posts = Post.recent ,键last_posts被添加到缓存中。 第二次执行同一命令时,出现冻结错误。

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

我在这里做错什么了吗?

谢谢!

提姆

您正在缓存排序选项,而不是任何实际结果。 执行查询时,Rails将修改您的查询选项,该选项将不起作用,因为缓存中的某些内容被认为是不可变的。

尝试这个:

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

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

请注意,如果您在Rails 3中执行此操作,因为Rails现在会延迟加载,因此将使用arel来获取记录。 因此,从技术上讲,您存储的只是一个活动记录关系。

因此,您需要先解决此问题,然后再将.to_a方法存储在内存缓存中。 这将使其成为存储对象之前的数组。

即@posts = Post.recent.to_a

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM