打扰大家了,现在遇到了下面这个问题,不知道如何解决。
在 Rails 3.2.17 中创建的 RedisCache 不能在 Rails 4.0.13 中正确读取
根据 Rails 官方升级指导,将项目从 Rails3.2.17 升级到 Rails 4.0.13,Ruby 版本保持 2.0.0-p247 没有改变。
原来项目使用 RedisStore 做 Cache,在 Blog 代码中使用 Cache 如下
class Blog
...
def self.hidden_ids
hidden_ids = Rails.cache.fetch(["hidden_ids blog"], expires_in: 1.week) do
hidden_ids = Blog.where(hidden:true).pluck(:id)
hidden_ids << 0 unless hidden_ids.include?(0)
end
hidden_ids
end
...
end
以上代码会保存一个数组[1,2,3,4,5,6,7]
保存到 Redis 中。
Redis 中的日志显示如下:
"setex" "hidden_ids blog" "604800" "\x04\bo: ActiveSupport::Cache::Entry\t:\x10@compressedF:\x10@expires_inf\x0c6.048e5:\x10@created_atf\x161436236658.032523:\x0b@value\"6\x04\b[\x11i\x01\x88i\x02-\x01i\x02\x7f\x01i\x02\xa6\x03i\x02\xb8\x05i\x02\xb6\x06i\x02\xe1\x06i\x02\xe8\x06i\x02\xea\x06i\x02\xfa\x06i\x02\xfb\x06i\x00"
在升级到 Rails 4.0.13 中之后,如果执行Blog.hidden_ids
结果变成了
"\x04\b[\x11i\x01\x88i\x02-\x01i\x02\x7F\x01i\x02\xA6\x03i\x02\xB8\x05i\x02\xB6\x06i\x02\xE1\x06i\x02\xE8\x06i\x02\xEA\x06i\x02\xFA\x06i\x02\xFB\x06i\x00"
而不是 Rails 3.2.17 版本中的
[136, 301, 383, 934, 1464, 1718, 1761, 1768, 1770, 1786, 1787, 0]
@value = Marshal.dump(value)
@value = value
convert_version_4beta1_entry!
,不知道是不是用来处理兼容的。