【问题标题】:Rails, TypeError: can't modify frozen object, only in Development modeRails,TypeError:无法修改冻结的对象,仅在开发模式下
【发布时间】:2010-11-28 10:36:23
【问题描述】:

所以我有这两行:

@unTaggedPhotos = Photo.cached_unTagged.sort_by{rand}[0..7]

调用:

Rails.cache.fetch('unTagged', :expires_in => 20.minutes) {Photo.where("hide = 0").limit(300)}

在清除缓存后第一次加载页面时它可以工作,但随后出现冻结对象错误。

奇怪的是,在运行相同代码的我的网站的实时版本上,这似乎不是问题。 (我还缓存了其他适用于本地版本的东西)

【问题讨论】:

  • 哪里抛出异常?
  • 在我引用的第一行代码。
  • 请发布您的 config/development.rbconfig/production.rb 文件以及您配置缓存设置的任何其他文件。
  • From development.rb: # 显示完整的错误报告并禁用缓存 config.consider_all_requests_local = true config.action_view.debug_rjs = true config.action_controller.perform_caching = false 和来自 production.rb config.consider_all_requests_local = false config.action_controller.perform_caching = true

标签: ruby-on-rails caching


【解决方案1】:

我不确定这是否是解决问题的最佳方法,但是当我将其分为两个步骤并在引用缓存数据时调用 ruby​​ 的 dup 方法时,它不再抱怨被冻结了。

myUTP = Photo.cached_unTagged.dup
@unTaggedPhotos = myUTP.sort_by{rand}[0..7]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2017-05-28
    • 2016-03-26
    相关资源
    最近更新 更多