[cgiapp] RFC: first-class support for PSGI in CGI::Application
Ron Savage
ron at savage.net.au
Sat Feb 13 20:21:11 EST 2010
Hi Mark
Same msg, longer reply.
On Sat, 2010-02-13 at 19:20 -0500, Mark Stosberg wrote:
> > I've tried reading the PSGI docs a number of times, but my head swims
> > because of the quantity of apparently-disparate modules.
> >
> > What I'd like is to see /how to/ convert a
> > CGI::Application::Dispatch-based script into a *::PSGI, including
> > configuring the web server.
> >
> > I don't want a statement: It can be done. I'm sure it can be done, but a
> > step-by-step recipe is what I'm after.
> >
> > And I don't want to be hammered with a list of possibilities. I want (to
> > start with) just one way which actually works.
>
> Ron,
>
> The way I would like to document for you doesn't exist yet, because
> support has not yet been built directly into CGI::Application and
> CGI::Application::Dispatch.
>
> Here's some instructions that I think could work right now, using Apache
> and mod_cgi.
>
> First, the web server configurations would be the same as they are now
> for CGI::Application::Dispatch: You would set up some mod_rewrite rules
> that pass requests on to the dispatcher if the request is for file or
> directory which does not physically exist. The details of that are in
> the ::Dispatch documentation.
>
> Then your dispatch.cgi could look like this:
>
> use Plack::Handler::CGI;
> use CGI::Application::Dispatch::PSGI;
> use WebApp::Dispatch;
>
> Plack::Handler::CGI->new->run(
> WebApp::Dispatch->as_psgi
> );
>
> Some notes about this:
>
> - This is not the way that the Plack documentation would prefer that you
> do it. It advocates foremost a more abstracted approach of using a
> ".psgi" file, which could be loaded and run without modification with
> all handlers that Plack supports. For an application that is designed
> to run in one environment, I see this as unnecessary complexity.
Agreed.
> - CGI::Application::Dispatch::PSGI has a couple of drawbacks which would
> be addressed by adding core support to CGI::Application and
> ::Dispatch:
>
> - It ineffectively allows headers to fully generated, only to reparse
> them back to the required PSGI data structure, only to have
> regenerated a moment later by PSGI back to proper headers. With core
> support, headers could generated once, not twice.
Yes, that point in the doc stuck me as odd, but I'm assuming it's an
interim measure.
> - It locks you into using CGI::PSGI as the query object (which means
> you are using CGI.pm). Although no other CGI.pm-like options exist
> now that support CGI, this is something that I would like
> CGI::Application to support, so that CGI::Simple::PSGI will one day
> be an option, for example.
I was wondering about that, too.
--
Ron Savage
ron at savage.net.au
http://savage.net.au/index.html
More information about the cgiapp
mailing list