取势 明道 优术

作者为 扶 凯 发表

圣诞节就接近了,我们会这几天探究更多的中间件组件,上个文件,今天我们会快速的讲一些非常好的中间件组件.

ErrorDocument
当你从你的应用中 die 掉时或者想显示 "Forbidden" 的出错信息时.你可能想根据不同的出错信息,定制你的出错网页.ErrorDocument 是完全地用来实现这个功能的中间件.象 Apache 的 ErrorDocument 指令.

builder {
    enable "ErrorDocument", 500 => "/path/to/error.html";
    $app;
};

 你只要映射任意的错误 code 到服务器的静态的路径.你能激活 StackTrace 的中间件,在你开发的过程中.和这个 ErrorDocument 的中间件在你的生产环境中显示出错的网页.
这个中间件包含在 Plack 的核心中,所以安装就有了.

 

Session
真不好意思,这个又是从 Rack 学的.Rack 默认有一个 rack.session 的单独的 Rack 的环境 hash.默认的这个的接口是 Ruby 的 hash 的对象,我这没有定义的成默认标准接口的一部分,但还是偷了很多他的想法.

builder {
     enable "Session", store => "File";
     $qpp;
 };

 默认的这个 Session 会存 session 的信息在内存中,这会不能工作在 prefork 的服务器上,它附带了诸如默认存储引擎 CHI,它可以很容易使用其他存储引擎,像我们这样在验证中间件组件见到的.
Session 的对象标准的方法是象 get 和 set ,他能访问到 plack.session 的 PSGI 的 env 的 hash.应用和框架也能访问到 PSGI 的 evn 的 hash .只要使用 Session 在那个 app 中.象 Tatsumaki.

# Tatsumaki app
 sub get {
     my $self = shift;
     my $uid = $self->request->session->get('uid');
     $self->request->session->set(last_access => time);
     ...
 }

而好处是,任何 PSGI 应用程序都可以共享数据,只要这个中,因为他们使用相同的存储.目前一些现有的框架适配器,并没有从最终用户应用程序来访问这个环境还哈希,所以应该在不久的将来逐步更新.
Session 中间件是 Stevan Little 开发的,并在CPAN上可用.

 

Debug
这个主意是从 Rack-bug和 django debug toolbar中偷来的.通过启用这个中间件可以看到方便的调试在右侧的面板,您可以点击并查看详细的数据和有关内容进行分析.
打开这个功能后,这个面板包含了
Timer(request time)
Memory(how is memory increased if there's any leaks)
Request (Detailed request headers)
Responses (Response headers etc.).

builder {
     enable "Debug";
     $app;
 };

 这可以见到使用起来非常容易,这可以激活的面板列表,以便使用特定面板或其他非默认面板.
更多的面板列表的信息,象 DBI 的 query 的配置,Catalyst 的日志 Dumper 之类,可以看 github .
其它技巧:
还推荐一个更加强大的: enable "LnteractiveDebugger"
加一个性能的面板:enable 'Debug',panels =>[['Profiler::NYTProf']]

 

Proxy代理
代理 HTTP 的请求到其它的应用这个功能非常有用,无论是运行在互联网上或在同一个网络.前者将是非常必要,如果你想让代理从您的应用程序提供 JSON API,而后者是将不同的机器上运行的应用程序和使用你的应用程序作为反向代理,虽然这个象 nginx ,lighttpd 或 perlbal 之类前端 Web 服务器来完成这项工作工作,但我们在这也提供.
Plack::App::Proxy 的中间件是这样的:

use Plack::App::Proxy;
use Plack::Builder;

my $app = Plack::App::Proxy->new(host => '192.168.0.2:8080')->to_app;

builder {
    mount "/app" => $app;
};

 这个 Proxy 的中间件是 Lee Aylward 开发的.
更加多可用的中间件在 Plack 的发行中和 CPAN 上有,并非所有的中间件组件都应该是伟大的,但是只要支持PSGI,它们就能帮你共享和支持大多数框架.

服务器状态
想有象 Nginx 那样的状态显示吗?

enable "ServerStatus::Lite",
    path => '/server-status',
    allow => ['127.0.0.1'],
    scoreboard => '/tmp/score';


 

这是我的译文,原文:http://advent.plackperl.org/2009/12/day-22-discover-more-middleware.html

 

 

 

 

来了就留个评论吧! 1个评论