From: markie Date: Mon, 22 Feb 2010 05:26:04 +0000 (-0800) Subject: switch to using Plack, add FCGI support, use Plack::Test instead of HTTP::Request... X-Git-Tag: v0.003~7 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FWeb-Simple.git;a=commitdiff_plain;h=e27ab5c58dc809041fcf3ef09cfc2e1ba9f4066a switch to using Plack, add FCGI support, use Plack::Test instead of HTTP::Request::AsCGI --- diff --git a/Makefile.PL b/Makefile.PL index 182fb01..7d03492 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -4,5 +4,6 @@ use inc::Module::Install 0.91; all_from 'lib/Web/Simple.pm'; requires 'Syntax::Keyword::Gather'; +requires 'Plack'; WriteAll; diff --git a/lib/Web/Simple/Application.pm b/lib/Web/Simple/Application.pm index c115e6e..c24ac79 100644 --- a/lib/Web/Simple/Application.pm +++ b/lib/Web/Simple/Application.pm @@ -243,17 +243,22 @@ sub _run_with_self { sub run_if_script { # ->as_psgi_app is true for require() but also works for plackup return $_[0]->as_psgi_app if caller(1); - my $class = shift; - my $self = $class->new; + my $self = ref($_[0]) ? $_[0] : $_[0]->new; $self->run(@_); } sub _run_cgi { my $self = shift; - require Web::Simple::HackedPlack; + require Plack::Server::CGI; Plack::Server::CGI->run($self->as_psgi_app); } +sub _run_fcgi { + my $self = shift; + require Plack::Server::FCGI; + Plack::Server::FCGI->run($self->as_psgi_app); +} + sub as_psgi_app { my $self = shift; ref($self) ? sub { $self->_dispatch(@_) } : sub { $self->new->_dispatch(@_) } @@ -261,20 +266,21 @@ sub as_psgi_app { sub run { my $self = shift; - if ($ENV{GATEWAY_INTERFACE}) { + if ($ENV{PHP_FCGI_CHILDREN} || $ENV{FCGI_ROLE} || $ENV{FCGI_SOCKET_PATH}) { + return $self->_run_fcgi; + } elsif ($ENV{GATEWAY_INTERFACE}) { return $self->_run_cgi; } my $path = shift(@ARGV) or die "No path passed - use $0 / for root"; - require HTTP::Request::AsCGI; require HTTP::Request::Common; + require Plack::Test; local *GET = \&HTTP::Request::Common::GET; my $request = GET($path); - my $c = HTTP::Request::AsCGI->new($request)->setup; - $self->_run_cgi; - $c->restore; - print $c->response->as_string; + my $response; + Plack::Test::test_psgi($self->as_psgi_app, sub { $response = shift->($request) }); + print $response->as_string; } 1;