我在使用我的机架应用程序生成页面时遇到了一些问题。
我将我的机架应用程序生成的页面存储在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代码前面的额外内容,我如何阻止它在浏览器结果中显示?
答案 0 :(得分:4)
Dalli使用Marshal.dump
序列化你设置的值(这样你可以缓存任意ruby对象),所以nginx获取的不仅仅是字符串,而是ruby的marshal格式的数据。您看到的额外字节包含编组头(格式版本等)和字节,表示后面的字节是字符串。
您可以告诉dalli存储对象的原始值:
memcached.set(req.path_info, response[2][0], nil, :raw => true)