J'ai en cours d'exécution dans un problème avec les Rails.cache méthodes sur 3.1.0.rc4 (ruby 1.9.2p180 (2011-02-18 révision 30909) [x86_64-darwin10]). Le code fonctionne très bien au sein de la même application sur 2.3.12 (ruby 1.8.7 (2011-02-18 version 334) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2011.03), mais a commencé à retourner une erreur après la mise à niveau. Je n'ai pas été en mesure de comprendre pourquoi encore.
L'erreur semble se produire lorsque vous essayez d'en cache les objets qui ont plus d'une portée sur eux.
Aussi, toutes portées à l'aide de lambda échouer indépendamment de la façon dont de nombreux champs d'application.
J'ai frappé des échecs de ces modèles:
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
C'est l'erreur que je reçois:
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>'
J'ai essayé d'utiliser l' :raw => true option comme une alternative, mais qui ne fonctionne pas parce que les Rails.le cache.extraction de blocs de tenter de cache d'objets.
Toutes les suggestions? Merci à l'avance!