当nginx获取memcached rack结果时显示添加的奇怪字符串

时间:2012-08-05 16:41:38

标签: ruby nginx memcached rack dalli

我在使用我的机架应用程序生成页面时遇到了一些问题。

我将我的机架应用程序生成的页面存储在memcache中,其中包含以下(ruby)代码:

require 'dalli'
memcached = Dalli::Client.new("localhost:11211")
memcached.set(req.path_info, response[2][0])

(其中response [2] [0]是生成的html代码)

在我的nginx服务器配置中,我有以下内容:

location @rack {
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://127.0.0.1:9292;
}
location @memcached {
  set $memcached_key $request_uri;
  memcached_pass localhost:11211;
  default_type text/html;
  error_page 404 = @rack;
}
location / {try_files @memcached;}

这种方法有效但不完全:传递给我浏览器的内容现在以:

开头
I"¯[<!DOCTYPE html><html ...

我的问题是: 什么是html代码前面的额外内容,我如何阻止它在浏览器结果中显示?

1 个答案:

答案 0 :(得分:4)

Dalli使用Marshal.dump序列化你设置的值(这样你可以缓存任意ruby对象),所以nginx获取的不仅仅是字符串,而是ruby的marshal格式的数据。您看到的额外字节包含编组头(格式版本等)和字节,表示后面的字节是字符串。

您可以告诉dalli存储对象的原始值:

memcached.set(req.path_info, response[2][0], nil, :raw => true)