Ruby 1.9 -Ku,mem_cache_store和无效的多字节转义错误

时间:2010-11-01 12:53:16

标签: ruby caching ruby-on-rails-3 memcached ruby-1.9

此错误最初发布在此处:https://rails.lighthouseapp.com/projects/8994/tickets/5713-ruby-19-ku-incompatible-with-mem_cache_store 现在,由于我们遇到了同样的问题,我将在这里复制一个问题,希望有人已经有了答案: 当Ruby 1.9以unicode模式(-Ku)启动时,mem_cache_store.rb无法解析:

/usr/local/ruby19/bin/ruby -Ku /usr/local/ruby-1.9.2-p0/lib/ruby/gems/1.9.1/gems/
  activesupport-3.0.0/lib/active_support/cache/mem_cache_store.rb
/usr/local/ruby-1.9.2-p0/lib/ruby/gems/1.9.1/gems/activesupport-3.0.0/lib/active_support/
  cache/mem_cache_store.rb:32: invalid multibyte escape: /[\x00-\x20%\x7F-\xFF]/

我们的情况几乎完全相同:当您将config.action_controller.cache_store设置为:mem_cache_store,并尝试运行测试,控制台或服务器时,您会收到此信息:

/Users/%username%/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/
  cache/mem_cache_store.rb:32: invalid multibyte escape: /[\x00-\x20%\x7F-\xFF]/

任何想法如何避免这种情况?...

1 个答案:

答案 0 :(得分:2)

在unicode模式下的Ruby 1.9将尝试将正则表达式解释为unicode。为避免这种情况,您需要为“无编码”传递正则表达式选项“n”:

ESCAPE_KEY_CHARS = /[\x00-\x20%\x7F-\xFF]/n

现在我们有了原始的8位编码(Ruby 1.8讲的唯一内容):

ruby-1.9.2-p136 :001 > ESCAPE_KEY_CHARS = /[\x00-\x20%\x7F-\xFF]/n.encoding
=> # <Encoding:ASCII-8BIT>

希望Rails团队修复此问题,因为现在你必须编辑文件。