{"thread":{"id":"24019","subject":"[PATCH/RFC] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension","startedAt":"2010-06-05T21:11:18Z","lastAt":"2010-06-06T20:18:03Z","messageCount":4,"participants":["Jakub Narebski","Ævar Arnfjörð Bjarmason","Pavan Kumar Sunkara"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"143058","messageId":"1275772278-14709-1-git-send-email-jnareb@gmail.com","threadId":"24019","inReplyTo":null,"subject":"[PATCH/RFC] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2010-06-05T21:11:18Z","receivedAt":"2010-06-05T21:11:18Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"If the name of the script ($SCRIPT_NAME or $SCRIPT_FILENAME CGI\nenvironment variable, or __FILE__ literal) ends with '.fcgi'\nextension, run gitweb in FastCGI mode, as if it was run with\n'--fastcgi' / '--fcgi' option.\n\nThis is intended for easy deploying gitweb using FastCGI\ninterface.\n\nSigned-off-by: Jakub Narebski <jnareb@gmail.com>\n---\nThis patch is based on a0446e7 commit (gitweb: Add support for\nFastCGI, using CGI::Fast, 2010-05-07), currently in 'next' \n(from 'jn/gitweb-fastcgi' branch).\n\nI have not actually tested that it runs as FastCGI script.\n\nNow to run gitweb using FastCGI, all one has to do is to rename it\nfrom gitweb.cgi to gitweb.fcgi.  And of course configure web server\nto run it using FastCGI interface.\n\n gitweb/gitweb.perl |   21 +++++++++++++--------\n 1 files changed, 13 insertions(+), 8 deletions(-)\n\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex c42c16f..47ef993 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -1056,19 +1056,24 @@ our $is_last_request = sub { 1 };\n our ($pre_dispatch_hook, $post_dispatch_hook, $pre_listen_hook);\n our $CGI = 'CGI';\n our $cgi;\n+sub configure_as_fcgi {\n+\trequire CGI::Fast;\n+\tour $CGI = 'CGI::Fast';\n+\n+\tmy $request_number = 0;\n+\t# let each child service 100 requests\n+\tour $is_last_request = sub { ++$request_number > 100 };\n+}\n sub evaluate_argv {\n+\tmy $script_name = $ENV{'SCRIPT_NAME'} || $ENV{'SCRIPT_FILENAME'} || __FILE__;\n+\tconfigure_as_fcgi()\n+\t\tif $script_name =~ /\\.fcgi$/;\n+\n \treturn unless (@ARGV);\n \n \trequire Getopt::Long;\n \tGetopt::Long::GetOptions(\n-\t\t'fastcgi|fcgi|f' => sub {\n-\t\t\trequire CGI::Fast;\n-\t\t\tour $CGI = 'CGI::Fast';\n-\n-\t\t\tmy $request_number = 0;\n-\t\t\t# let each child service 100 requests\n-\t\t\tour $is_last_request = sub { ++$request_number > 100 };\n-\t\t},\n+\t\t'fastcgi|fcgi|f' => \\&configure_as_fcgi,\n \t\t'nproc|n=i' => sub {\n \t\t\tmy ($arg, $val) = @_;\n \t\t\treturn unless eval { require FCGI::ProcManager; 1; };\n-- \n1.7.0.1\n"},{"id":"143059","messageId":"AANLkTimrD_JkJdHOn6PfKr0LMaGNn3V9_cHOkdjKVke9@mail.gmail.com","threadId":"24019","inReplyTo":"1275772278-14709-1-git-send-email-jnareb@gmail.com","subject":"Re: [PATCH/RFC] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2010-06-05T21:12:05Z","receivedAt":"2010-06-05T21:12:05Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Sat, Jun 5, 2010 at 21:11, Jakub Narebski <jnareb@gmail.com> wrote:\n> If the name of the script ($SCRIPT_NAME or $SCRIPT_FILENAME CGI\n> environment variable, or __FILE__ literal) ends with '.fcgi'\n> extension, run gitweb in FastCGI mode, as if it was run with\n> '--fastcgi' / '--fcgi' option.\n\nLooks good to me, it'll make deploying on e.g. Apache a lot easier,\nand doubtless most other web servers too.\n"},{"id":"143103","messageId":"201006062209.53176.jnareb@gmail.com","threadId":"24019","inReplyTo":"1275772278-14709-1-git-send-email-jnareb@gmail.com","subject":"[PATCH/RFC v2] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2010-06-06T20:09:49Z","receivedAt":"2010-06-06T20:09:49Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"If the name of the script ($SCRIPT_NAME or $SCRIPT_FILENAME CGI\nenvironment variable, or __FILE__ literal) ends with '.fcgi'\nextension, run gitweb in FastCGI mode, as if it was run with\n'--fastcgi' / '--fcgi' option.\n\nThis is intended for easy deploying of gitweb using FastCGI\ninterface.\n\nIncludes update to gitweb/INSTALL.\n\nSigned-off-by: Jakub Narebski <jnareb@gmail.com>\n---\nThis patch differs from previous version only in that it now includes\nchange to gitweb/INSTALL.  Can anyone check if the information stated\nthere is correct?\n\nThis patch is based on a0446e7 commit (gitweb: Add support for\nFastCGI, using CGI::Fast, 2010-05-07), currently in 'next' \n(from 'jn/gitweb-fastcgi' branch).\n\nI have not actually tested that it runs as FastCGI script.\n\n gitweb/INSTALL     |   28 ++++++++++++++++++++++++++++\n gitweb/gitweb.perl |   21 +++++++++++++--------\n 2 files changed, 41 insertions(+), 8 deletions(-)\n\ndiff --git a/gitweb/INSTALL b/gitweb/INSTALL\nindex d484d76..617c9f4 100644\n--- a/gitweb/INSTALL\n+++ b/gitweb/INSTALL\n@@ -230,12 +230,26 @@ $projects_list variable in gitweb config):\n \tperl -- /var/www/cgi-bin/gitweb.cgi\n \n \n+Running gitweb using FastCGI interface\n+--------------------------------------\n+\n+To run gitweb as FastCGI script (using FastCGI interface), rather than\n+plain CGI script, you need to either pass '--fastcgi' or '--fcgi' parameter\n+to gitweb script, or rename it to 'gitweb.fcgi' (to end with '.fcgi'\n+extension).  To run gitweb using FastCGI interface you need CGI::Fast\n+and FCGI Perl modules installed.\n+\n+You can also pass '--nproc=<n>' parameter to gitweb script to configure how\n+many FCGI::ProcManager processes to use.\n+\n+\n Requirements\n ------------\n \n  - Core git tools\n  - Perl\n  - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename.\n+   To run gitweb using FastCGI interface CGI::Fast and FCGI are needed.\n  - web server\n \n \n@@ -272,3 +286,17 @@ See also \"Webserver configuration\" section in README file for gitweb\n \t    Order allow,deny\n \t    Allow from all\n \t</Directory>\n+\n+- Apache2, gitweb installed as 'gitweb.fcgi' FastCGI script,\n+  under /var/www/fcgi-bin/\n+\n+\tLoadModule fcgid_module modules/mod_fcgid.so\n+\n+\tAlias /fcgi-bin \"/var/www/fcgi-bin\"\n+\n+\t<Directory \"/var/www/fcgi-bin\">\n+\t    SetHandler fcgid-script\n+\t    Options +ExecCGI\n+\t    Order allow,deny\n+\t    Allow from all\n+\t</Directory>\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex c42c16f..47ef993 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -1056,19 +1056,24 @@ our $is_last_request = sub { 1 };\n our ($pre_dispatch_hook, $post_dispatch_hook, $pre_listen_hook);\n our $CGI = 'CGI';\n our $cgi;\n+sub configure_as_fcgi {\n+\trequire CGI::Fast;\n+\tour $CGI = 'CGI::Fast';\n+\n+\tmy $request_number = 0;\n+\t# let each child service 100 requests\n+\tour $is_last_request = sub { ++$request_number > 100 };\n+}\n sub evaluate_argv {\n+\tmy $script_name = $ENV{'SCRIPT_NAME'} || $ENV{'SCRIPT_FILENAME'} || __FILE__;\n+\tconfigure_as_fcgi()\n+\t\tif $script_name =~ /\\.fcgi$/;\n+\n \treturn unless (@ARGV);\n \n \trequire Getopt::Long;\n \tGetopt::Long::GetOptions(\n-\t\t'fastcgi|fcgi|f' => sub {\n-\t\t\trequire CGI::Fast;\n-\t\t\tour $CGI = 'CGI::Fast';\n-\n-\t\t\tmy $request_number = 0;\n-\t\t\t# let each child service 100 requests\n-\t\t\tour $is_last_request = sub { ++$request_number > 100 };\n-\t\t},\n+\t\t'fastcgi|fcgi|f' => \\&configure_as_fcgi,\n \t\t'nproc|n=i' => sub {\n \t\t\tmy ($arg, $val) = @_;\n \t\t\treturn unless eval { require FCGI::ProcManager; 1; };\n-- \n1.7.0.1\n"},{"id":"143105","messageId":"AANLkTimApmqQmbsIkfKmgXAMTaoQqDV5fU3S7SwXoScY@mail.gmail.com","threadId":"24019","inReplyTo":"201006062209.53176.jnareb@gmail.com","subject":"Re: [PATCH/RFC v2] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension","fromName":"Pavan Kumar Sunkara","fromEmail":"pavan.sss1991@gmail.com","sentAt":"2010-06-06T20:18:03Z","receivedAt":"2010-06-06T20:18:03Z","isPatch":true,"sender":{"key":"pavan.sss1991@gmail.com","avatar":"https://avatars.githubusercontent.com/u/174703?v=4"},"body":"> @@ -1056,19 +1056,24 @@ our $is_last_request = sub { 1 };\n>  our ($pre_dispatch_hook, $post_dispatch_hook, $pre_listen_hook);\n>  our $CGI = 'CGI';\n>  our $cgi;\n> +sub configure_as_fcgi {\n> +       require CGI::Fast;\n> +       our $CGI = 'CGI::Fast';\n> +\n> +       my $request_number = 0;\n> +       # let each child service 100 requests\n> +       our $is_last_request = sub { ++$request_number > 100 };\n> +}\n\nYou missed to put a new line in here.\n\n>  sub evaluate_argv {\n> +       my $script_name = $ENV{'SCRIPT_NAME'} || $ENV{'SCRIPT_FILENAME'} || __FILE__;\n> +       configure_as_fcgi()\n> +               if $script_name =~ /\\.fcgi$/;\n> +\n>        return unless (@ARGV);\n>\n>        require Getopt::Long;\n>        Getopt::Long::GetOptions(\n> -               'fastcgi|fcgi|f' => sub {\n> -                       require CGI::Fast;\n> -                       our $CGI = 'CGI::Fast';\n> -\n> -                       my $request_number = 0;\n> -                       # let each child service 100 requests\n> -                       our $is_last_request = sub { ++$request_number > 100 };\n> -               },\n> +               'fastcgi|fcgi|f' => \\&configure_as_fcgi,\n>                'nproc|n=i' => sub {\n>                        my ($arg, $val) = @_;\n>                        return unless eval { require FCGI::ProcManager; 1; };\n> --\n> 1.7.0.1\n\nThanks,\nPavan.\n"}]}