'body должен быть ссылкой на массив или дескриптором файла' при использовании Plack :: Middleware :: Cache - PullRequest
0 голосов
/ 27 июля 2011

Я использую 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.Что я мог сломать, отбросив эту строку?

...