Estoy tratando de almacenar en caché las respuestas de Python/matraz con memcached. Entonces quiero servir el caché usando nginx. Estoy utilizando el código frasco que se ve algo como esto:nginx con matraz y memcached devuelve algunos caracteres ilegibles
from flask import Flask, render_template
from werkzeug.contrib.cache import MemcachedCache
app = Flask(__name__)
cache = MemcachedCache(['127.0.0.1:11211'])
@app.route('/')
def index():
index = cache.get('request:/')
if index == None:
index = render_template('index.html')
cache.set('request:/', index, timeout=5 * 60)
return index
if __name__ == "__main__":
app.run()
y una configuración de nginx sitio que se ve algo como esto:
server {
listen 80;
location/{
set $memcached_key "request:$request_uri";
memcached_pass 127.0.0.1:11211;
error_page 404 405 502 = @cache_miss;
}
location @cache_miss {
uwsgi_pass unix:///tmp/uwsgi.sock;
include uwsgi_params;
error_page 404 /404.html;
}
}
Sin embargo, cuando se tira de la memoria caché el código html se prefija con una V, contiene caracteres \ u00e1 (alimentaciones de línea) y caracteres locales ilegibles, y tiene el sufijo "p1". como tal:
V<!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\u000a<head>\u000a <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\u000a <meta http-equiv="content-language" content="no">\u000a\u000a <title>
[...]
\u000a\u000a</body>\u000a</html>
p1
.
A pesar de que Content-Type es "text/html; charset = utf-8". Supuestamente el V [...] p1. Algo puede tener algo que ver con la transferencia fragmentada que codifica algo, un indicador que no está presente en el encabezado de respuesta. ¿Que debería hacer?
Bien, así que lo semi-fijo. Agregué add_header Transfer-Encoding fragmentado; en la configuración nginx, pero ahora obtengo 'Error 321 (net :: ERR_INVALID_CHUNKED_ENCODING)' si lo cargo en Chrome después de haberlo cargado en Firefox. ¿Hay una mejor manera de hacer este tipo de cachine, quizás? – jondoe