Catalyst-Engine-PSGI
view release on metacpan or search on metacpan
lib/Catalyst/Engine/PSGI.pm view on Meta::CPAN
# $body is FH
} elsif (ref($body) eq 'CODE') {
return $body;
} else {
$body = [ $body ];
}
my $headers = [];
$c->res->headers->scan(sub { my($k, $v) = @_; push @$headers, $k, _escape($v) });
return [ $c->res->status, $headers, $body ];
}
sub _escape {
local $_ = shift;
s/(\r?\n)+/ /g;
return $_;
}
no Moose;
1;
__END__
=encoding utf-8
=for stopwords
=head1 NAME
Catalyst::Engine::PSGI - PSGI engine for Catalyst
=head1 WARNINGS
B<Catalyst 5.9000 or later has a built-in PSGI support and this module is deprecated.>
=head1 SYNOPSIS
# app.psgi
use strict;
use MyApp;
MyApp->setup_engine('PSGI');
my $app = sub { MyApp->run(@_) };
=head1 DESCRIPTION
Catalyst::Engine::PSGI is a Catalyst Engine that adapts Catalyst into the PSGI gateway protocol.
=head1 COMPATIBILITY
=over 4
=item *
Currently this engine works with Catalyst 5.8 (Catamoose) or newer.
=item *
Your application is supposed to work with any PSGI servers without any
code modifications, but if your application uses C<< $c->res->write >>
to do streaming write, this engine will buffer the ouput until your
app finishes.
To do real streaming with this engine, you should implement an
IO::Handle-like object that responds to C<getline> method that returns
chunk or undef when done, and set that object to C<< $c->res->body >>.
Alternatively, it is possible to set the body to a code reference,
which will be used to stream content as documented in the
L<PSGI spec|PSGI/Delayed_Reponse_and_Streaming_Body>.
=item *
When your application runs behind the frontend proxy like nginx or
lighttpd, this Catalyst engine doesn't automatically recognize the
incoming headers like C<X-Forwarded-For>, because respecting these
headers by default causes a potential security issue.
You have to enable L<Plack::Middleware::ReverseProxy> or
L<Plack::Middleware::ForwardedHeaders> to automatically promote those
forwarded headers into C<REMOTE_ADDR> hence IP address of the request.
ReverseProxy middleware is pretty simple and has no configuration
while ForwardedHeaders allows you to configure which upstream host to
trust, etc.
=back
=head1 AUTHOR
Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>
Most of the code is taken and modified from Catalyst::Engine::CGI.
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
I<Catalyst::Engine> L<PSGI> I<Plack>
=cut
( run in 2.181 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )