Я использую Plack :: Middleware :: Cache от Ingy для кэширования запросов страниц в мое приложение Plack.К сожалению, первый запрос к кешируемому URL-адресу умирает с «body должен быть массив ref или filehandle».
Пакет кеша действительно небольшой, поэтому было довольно легко отследить проблему, но яне уверен, что у меня есть хороший обходной путь.Если я закомментирую строку 57 , все будет работать как положено.Это, вероятно, есть причина, хотя.В жизненном цикле Plack-запроса есть несколько этапов, которые я на самом деле не получаю (особенно последний из них о «кусках», возможно, наиболее подходящих).
# in my app.psgi
builder {
enable 'Cache', match_url => '[?&]cache',
cache_dir => '/tmp/plack-cache';
# ... some 'mounts'
}
# in Plack::Middleware::Cache
return Plack::Util::response_cb(
$self->app->($env),
sub {
my $cache = shift;
make_path($dir) unless -d $dir;
return sub {
if (not defined $_[0]) {
nstore $cache, $file;
return;
}
$cache->[2] ||= '';
# comment out this line and errors go away!
#$cache->[2] .= $_[0]; # the body is an arrayref sometimes!
return $_[0];
}
}
);
Насколько яМожно сказать, что тело (третий элемент в arrayref, переданный обратному вызову response_cb) является arrayref.Что я мог сломать, отбросив эту строку?