On Mon, May 10, 2010, Tatsuhiko Miyagawa wrote: > On Sun, May 9, 2010 at 4:05 PM, Jakub Narebski <jnareb@xxxxxxxxx> wrote: >>> >>> `plackup -s FCGI` makes your PSGI app a fastcgi handler using FCGI.pm, >>> or `plackup -s Net::FastCGI` does the same but using Net::FastCGI, >>> pure perl alternative. >> >> It is a pity that Plack::App::WrapFCGI / FCGI::Emulate::PSGI does not >> exist, so that gitweb.psgi wrapper would not require indirectly >> CGI::Compile. > > I *think* we discussed about this on IRC, but you still seems to be > misunderstanding: I'm sorry for the confusion; I didn't make myself clear (and there also was some misunderstanding of technologies involved on my side). > > You have a CGI script and you want to turn it into a PSGI application, > hence we have CGI::Emulate::PSGI and CGI::Compile. > > You usually do not have a FCGI "application". You're writing a .fcgi > "wrapper" to make your CGI script runnable from a web server (like > you're doing with gitweb.fcgi). After thinking about it a bit, I realized that I don't want to have Plack::App::WrapFCGI wrapper (which if there are no FastCGI-only Perl web apps, e.g. using FCGI directly and which do not have support for running as ordinary CGI would be totally unnecessary), but I want to avoid price of using CGI::Compile. >From what I understand Plack::App::WrapCGI does something like that (example taken from CGI::Compile manpage): use CGI::Emulate::PSGI; use CGI::Compile; my $cgi_script = "/path/to/foo.cgi"; my $sub = CGI::Compile->compile($cgi_script); my $app = CGI::Emulate::PSGI->handler($sub); # $app is a PSGI application A typical application that uses CGI::Fast to provide support for running as FastCGI script looks like this, according to CGI::Fast manpage (the example is slightly modified): use CGI::Fast; do_some_initialization(); while ($q = new CGI::Fast) { process_request(); # it uses 'my $cgi = CGI->new()' inside } I'd like to use the fact that per-request part is separated from initialization part in wrapper for PSGI. use CGI::Emulate::PSGI; use CGI::Fast::Loader; # or something like that my $fcgi_script = "/path/to/foo.fcgi"; my $fcgi = CGI::Fast::Loader->load($fcgi_script); $fcgi->import(qw(do_some_initialization process_request)); do_some_initialization(); my $app = CGI::Emulate::PSGI->handler(\&process_request); # $app is a PSGI application That is of course heavy handwaving, and I am not sure if it is something that can be generalized for scripts that use FCGI module (and FCGI::Request) directly. > > Writing an FCGI emulation layer for PSGI would allow you to run the > FCGI wrapper from PSGI compatible web server - which does not make > sense AT ALL!. It's even one more indirection. Well, it would allow to run FastCGI application in *any* PSGI compatibile web server, including standalone (HTTP::Server::PSGI), mod_perl and Test::Plack 'server'. Also even if wrapping FCGI application as PSGI application to run it on FCGI server doesn't make much sense on first glance, it neverheless allows to use many, many Plack::Middleware::*. Mind you, I don't think that there are many FastCGI-only Perl web apps... if there are any. I hope that clarify what I want (and no, I guess FCGI::Emulate::PSGI ain't it). -- Jakub Narebski Poland -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html