On Sun, 23 May 2010, Eric Wong wrote: > Jakub Narebski <jnareb@xxxxxxxxx> wrote: > > On Thu, 20 May 2010, Jakub Narebski wrote: > > > > > The configuration for 'plackup' is currently embedded in generated > > > gitweb.psgi wrapper, instead of using httpd.conf ($conf). > > > > A question: is this solution acceptable? Or should the configuration > > (port, address if git-instaweb was run with '--local', root) be in > > a separate file. > > Hi Jakub, > > Yes, the psgi wrapper is acceptable and probably ideal. > > My understanding is that the .psgi file is analogous to a .ru file in > the (Ruby) Rack world[1], and having only a .ru file is probably how I > would add Rack support to git-instaweb if WEBrick weren't in Ruby > core[2]. Yes, .psgi file in the (Perl) PSGI/Plack world is, as I understand it, analogous to .ru file in the (Ruby) Rack world. PSGI/Plack was inspired by WSGI from Python world and Rack from Ruby world. There is no web server in Perl core, although probably HTTP::Server::Simple and HTTP::Engine comes close. Well, there is HTTP::Server::Brick inspired by WEBrick... Using PSGI/Plack (via wrapper around CGI) allows easily to serve gitweb's static files (stylesheet, images, etc.), gives persistent environment (although this probably doesn't matter much for git-instaweb), and allows for easy switching between different PSGI-capable (e.g. via PSGI handlers) web servers, including the default standalone HTTP::Server::PSGI (aka Standalone), HTTP::Server::Simple, preforking Starlet or Starman, currently via PLACK_SERVER environment variable. > > Webrick, which is in similar situation, uses httpd.conf config file in > > YAML. Unfortunately there is no config / serialization reader in Perl > > core, so if we have to go this route either the config file would have > > to be in Perl, or gitweb.psgi wrapper would have to include some simple > > config file parsing. > > I don't think we need parsing in the gitweb.psgi wrapper, we'll just > consider gitweb.psgi the config file. Well, if it is all right, I would keep it as it is now (rebased on top of Pavan's work related to GSoC 2010). If we would want to keep config separate from wrapper (e.g. by installing wrappers in $(gitwebdir) together with gitweb.cgi, but keeping config files in ~/.gitweb or .git/gitweb), we can split it later. > This is also the case for Rack .ru files, which can be made executable > and have a shebang pointing to "rackup". Well, generated gitweb.psgi wrapper could have e.g. #!/usr/bin/env plackup or #!$PLACKUP (after putting full path to 'plackup' in $PLACKUP) as a she-bang line ('plackup' is PSGI/Plack equivalent inspired by 'rackup')... if not for the fact that (as I wrote earlier) different web servers supported by 'plackup' utility have different ways of configuring them. The common API is 'plackup' command line options. However in most operating systems everything after the interpreter in the she-bang line is passed as *single* option, so for example generating first line of gitweb.psgi wrapper as #!/usr/bin/evn plackup --port=1234 --host=127.0.0.1 wouldn't work. That is why I used Plack::Runner instead, the module behind 'plackup'. As a nice side effect now you don't need to have 'plackup' in $PATH; you only need to have Plack::Runner in $PERL5LIB (or equivalent), but you need to have other required modules there anyway. > [1] - I'm not familiar with Plack/PSGI at all, but I've been dabbling > quite a bit in Rack over the past year or two. > > [2] - of course since WEBrick is in Ruby core and WEBrick supports CGI > scripts out-of-the-box (unlike Rack), adding Rack support to > instaweb would be a waste of time. -- 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