Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Memcached中增加密钥大小 问题_Ruby On Rails_Caching_Memcached - Fatal编程技术网

Ruby on rails 如何在Memcached中增加密钥大小 问题

Ruby on rails 如何在Memcached中增加密钥大小 问题,ruby-on-rails,caching,memcached,Ruby On Rails,Caching,Memcached,我得到了一个错误: key too long "rack:session:BAh7...." /usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:703:in `get_server_for_key' /usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb

我得到了一个错误:

key too long "rack:session:BAh7...."
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:703:in `get_server_for_key'
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:920:in `request_setup'
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:885:in `with_server'
当我查看memcache-client-1.8.5/lib/memcache.rb:703时

def get_server_for_key(key, options = {})
  raise ArgumentError, "illegal character in key #{key.inspect}" if key =~ /\s/
  raise ArgumentError, "key too long #{key.inspect}" if key.length > 250
  ...
end
此外,最大长度为250字节

因为这是生产过程,很难复制这个错误,所以我想我可以在这里问一下,以前是否有人遇到过同样的问题

问题1:我可以从memcache客户端删除该语句吗? 问题2:有没有办法减少rails中的键大小?我在制作中使用了下面的.rb
这个限制似乎是由memcached本身强加的,而不是由Ruby强加的,所以删除该语句对您没有帮助。memcached文档表明,如果您的密钥大小超过250字节,那么您可能是做错了什么


是否将整个会话作为密钥转储到缓存中?如果要手动添加到缓存,请发布该代码。

如果密钥太长,请在将其存储到Rails.cache之前对每个密钥进行散列

大概是这样的:

def hash_key(string)
  Digest::SHA1.hexdigest(string)
end

您几乎肯定会看到这一点,因为您正在从cookie存储切换到memcached。您的浏览器仍然有旧会话cookie,ID很长。您需要从浏览器中删除此cookie,问题就会消失


如果您在生产站点上从cookie存储切换到memcached,这将是一个问题,因为您无法控制用户的浏览器。在这种情况下,您可能需要更改会话密钥以避免出现问题。

不要手动添加到缓存中。我在production.rb config.action\u controller.session\u store=:mem\u cache\u store中将rails配置为使用memchaced,只是将session\u store改为使用:mem\u cached\u store而不是cookie。config.action\u controller.session\u store=:mem\u cache\u store您应该注意冲突。确实如此。正如@rbajales所说,您不能只是散列键,因为这会引入冲突,最终会覆盖其他键并检索不正确的值。
key too long "rack:session:BAh7...."
def hash_key(string)
  Digest::SHA1.hexdigest(string)
end