【问题标题】:memcache error illegal character in key (Ruby 1.8.7 / Rails 2.3.9)memcache 错误 key 中的非法字符(Ruby 1.8.7 / Rails 2.3.9)
【发布时间】:2011-05-24 17:47:31
【问题描述】:

我的一个 Rails 应用程序 [Ruby 1.8.7 + Rails 2.3.9] 出现以下错误

A ArgumentError occurred in home#dashboard:
 illegal character in key "dashboard_prod:views/reports/1050 - 097"
 /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/activesupport-2.3.9/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb:643:in `get_server_for_key'

我google了一下,发现有人在http://www.coffeepowered.net/page/2/遇到了类似的问题

在该页面上提到,这应该可以工作:

class ActionController::Caching::Actions::ActionCachePath

    def path

        @cached_path ||= Digest::SHA1.hexdigest(@path)

    end

end

但我不确定我应该在哪里输入这个。所以我有两个问题:

  1. 如何解决手头的问题
  2. 我应该在哪里编写类似上面的代码,其中我们将覆盖某些标准类或在 Gem 中定义的类。

任何帮助将不胜感激。

【问题讨论】:

  • 正如我所料,错误是由于 1050 - 097 [dashboard_prod:views/reports/1050 - 097] 中的空格...我删除了空格 [1050-097 => 这实际上是邮政编码,应用程序显示一些基于邮政编码的报告],一切正常。但是我真的很想知道如何使路径的散列起作用,因为我认为我可能会再次遇到一些问题。如果我的客户再次输入空间怎么办。谁知道其他字符不能与 memcached 一起使用。

标签: ruby-on-rails memcached monkeypatching


【解决方案1】:

我认为您发现的帖子建议您使用该代码创建一个猴子补丁。在Rails.root + 'lib/' 下使用这些内容创建一个文件,并确保它在 ActionController 之后加载(这应该是默认值)。该补丁将覆盖 ActionController 的默认代码。

你肯定想要这样的东西——我总是确保我的 memcached 键是散列的。这使它们更难以调试,但它可以防止此类问题以及当有人创建对 memcached 来说太长的键时出现键长度溢出错误。

【讨论】:

  • 是的,确实在帖子中提到需要猴子补丁。非常感谢!
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多