相关疑难解决方法(0)

Rails 3.1中的Rails.cache错误 - TypeError:无法使用默认proc转储哈希

我在3.1.0.rc4上遇到了Rails.cache方法的问题(ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10]).该代码在2.3.12(ruby 1.8.7(2011-02-18 patchlevel 334)[i686-linux],MBARI 0x8770,Ruby Enterprise Edition 2011.03)上的相同应用程序中正常工作,但在升级后开始返回错误.我还没弄清楚原因.

尝试缓存具有多个范围的对象时,似乎会发生错误.

此外,无论使用多少范围,使用lambdas的任何范围都会失败.

我从这些模式中遇到了失败:

Rails.cache.fetch("keyname", :expires_in => 1.minute) do
    Model.scope_with_lambda
end


Rails.cache.fetch("keyname", :expires_in => 1.minute) do
    Model.scope.scope
end
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

TypeError: can't dump hash with default proc
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:627:in `dump'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:627:in `should_compress?'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:559:in `initialize'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:363:in `new'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:363:in `block in write'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:520:in `instrument'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:362:in `write'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.1.0.rc4/lib/active_support/cache.rb:299:in `fetch'
    from (irb):62
    from /project/shared/bundled_gems/ruby/1.9.1/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:45:in `start'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:8:in `start'
    from /project/shared/bundled_gems/ruby/1.9.1/gems/railties-3.1.0.rc4/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用:raw => …

ruby memcached caching ruby-on-rails ruby-on-rails-3

40
推荐指数
2
解决办法
2万
查看次数

在Rails中的会话中存储对象

我一直被教导在会话中存储对象是一个坏主意.而是应该存储ID,以便在需要时检索记录.

但是,我有一个应用程序,我想知道这个规则的例外.我正在构建一个flashcard应用程序,被测试的单词位于数据库的表中,其架构不会更改.我想在会话中存储当前正在进行测验的单词,以便用户可以在他们进入单独页面的情况下完成他们开始的位置.

在这种情况下,是否可以将这些单词作为对象存储在数据库中?如果是这样,为什么?我问的原因是因为测验的目的是快速移动,而且我讨厌在检索永远不会改变的记录时浪费数据库调用.但是,对于我不了解的大型会话,可能还有其他负面影响.

*为了记录,我尝试使用Rails 2.3中的内置memcache方法缓存它,但显然每个项目的最大大小为1MB.

ruby session ruby-on-rails

11
推荐指数
2
解决办法
2万
查看次数