[cgiapp] RFC: first-class support for PSGI in CGI::Application
Mark Stosberg
mark at summersault.com
Thu Feb 18 12:58:00 EST 2010
> The final result might look like this:
>
> use WebApp;
> use CGI::PSGI;
>
> my $handler = sub {
> my $env = shift;
> my $webapp = WebApp->new({ QUERY => CGI::PSGI->new($env) });
> $webapp->run_as_psgi;
> };
I've considered this more, I want to submit a second draft of a
proposal. First-class PSGI support should address all of the following
aspects:
1. Passing in and setting up the PSGI env
2. Returning the PSGI required return format
3. Accessing the environment in an abstracted way.
4. Wrapping the whole application as a coderef which does steps 1-3.
My initial proposal addressed the the return format, leaving setup and
"env" access to CGI::PSGI, and letting the user deal with 4, the final
wrapper.
Michael Peters rightly pointed that arguments to new({}) is how we make
all the other modifications to what happens in run(), and Miyagawa
suggested that we provide a shortcut to generate the final wrapper as
well, CGI::Application::PSGI does.
So, some proposal refinements:
1. We should add an "env" method as an abstract way to access the
environment. In non-PSGI code, this would just access \%ENV. Using
this, internal code and plugins could access the environment in a way
that would work with our without PSGI. With CGI::PSGI, we could access
this already through $self->query->env, and perhaps $self->env will
just be an alias for that. As a related example, we have this bug
report:
https://rt.cpan.org/Public/Bug/Display.html?id=54762
Adding a env() method to CGI::Application would help address it
somewhat.
2. We add a wrapper method which should take the same arguments as new,
but will default to setting up CGI::PSGI correctly and also calling run.
So, running a CGI::Application project on PSGI could be as simple as
this:
WebApp->psgi_app({ ... args to new() ... });
If you want to manually construct the code ref, of course you still
can.
Anyone else have further thoughts on PSGI integration?
Mark
--
. . . . . . . . . . . . . . . . . . . . . . . . . . .
Mark Stosberg Principal Developer
mark at summersault.com Summersault, LLC
765-939-9301 ext 202 database driven websites
. . . . . http://www.summersault.com/ . . . . . . . .
More information about the cgiapp
mailing list