¿Cómo le digo a mi aplicación de bailarina que serialice objetos en su caché?

Estoy usando una interfaz CHI para memcached (o File in devel) en mi aplicación Dancer, pero recibo un error en el serializador cuando guardo un objeto en caché. Tengo lo siguiente en mi configuración de bailarín:

engines:
  JSON:
    allow_blessed: 1
    convert_blessed: 1

¿Qué más necesito?

Error message:
Error while loading bin/app.pl: encountered object 'C3M::CMF=HASH(0x3ef8aa8)', but neither allow_blessed nor convert_blessed settings are enabled at /usr/lib/perl5/site_perl/5.10/CHI/Serializer/JSON.pm line 19.

preguntado el 03 de mayo de 12 a las 15:05

#dancer solicita aclaración: "Es posible que haya puesto la clave de configuración en el lugar equivocado, aunque es imposible saberlo con esa poca información". -

No entiendo esto /usr/lib/python5/site_python/5.10/CHI/Serializer/JSON.pm -

Acabo de votar para cerrar esto como "no es una pregunta real". Si se te ocurre una explicación razonable de /usr/lib/python5/site_python/5.10/CHI/Serializer/JSON.pm, nadie más estará de acuerdo y probablemente obtendrás una respuesta. Sin embargo, en este momento, hay demasiadas incógnitas y factores de confusión. -

sí, supongo que eso necesita una explicación... Tengo un script de greasemonkey que cambia de perl a python en el contenido html, una especie de broma... No lo he visto cambiarlo en los cuadros de entrada antes, tal vez stackoverflow en realidad usa el contenido durante el envío. -

Además de la clave JSON en los motores, tengo una clave template_toolkit: que funciona como se esperaba (cambiando las etiquetas de inicio/detención). -

1 Respuestas

CHI::Serializer::JSON no usa el mismo serializador que Dancer::Serializer::JSON. Dancer::Serializer::JSON usa la configuración ('motores') en config.yml, pero no hay forma de enviar opciones de configuración a CHI::Serializer::JSON.

solución alternativa:

use CHI::Serializer::JSON; 
my $JSON = JSON->new->utf8->canonical;
$JSON->allow_blessed(1);
$JSON->convert_blessed(1);
*CHI::Serializer::JSON::serialize   = sub { $JSON->encode( $_[1] ) };
*CHI::Serializer::JSON::deserialize = sub { $JSON->decode( $_[1] ) };

contestado el 04 de mayo de 12 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.