使用Plack :: Middleware :: Cache时,'body应该是数组引用或文件句柄'

时间:2011-07-27 02:49:44

标签: perl caching middleware plack

我正在使用Ingy的Plack::Middleware::Cache来缓存我的Plack应用程序的页面请求。不幸的是,对可缓存的URL的第一个请求以“body应该是数组引用或文件句柄”而死亡。

缓存包非常小,所以很容易跟踪问题,但我不确定我有一个很好的解决方法。如果我评论line 57,一切都按预期工作。这可能是有原因的。 Plack request life-cycle有一些我没有真正得到的阶段(尤其是关于'块'的最后一个阶段,可能是最相关的阶段。)

# 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];
            }
        }
    );

据我所知,body(传递给response_cb的回调的arrayref中的第三个元素)是一个arrayref。放弃那条线我能打破什么?

0 个答案:

没有答案