1

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

我将机架应用程序生成的页面存储在 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 代码前面的多余部分是什么,如何防止它显示在浏览器结果中?

4

1 回答 1

4

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

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

memcached.set(req.path_info, response[2][0], nil, :raw => true)
于 2012-08-05T18:12:41.267 回答