[PATCH/RFC v2] gitweb: Run in FastCGI mode if gitweb script has .fcgi extension

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If the name of the script ($SCRIPT_NAME or $SCRIPT_FILENAME CGI
environment variable, or __FILE__ literal) ends with '.fcgi'
extension, run gitweb in FastCGI mode, as if it was run with
'--fastcgi' / '--fcgi' option.

This is intended for easy deploying of gitweb using FastCGI
interface.

Includes update to gitweb/INSTALL.

Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx>
---
This patch differs from previous version only in that it now includes
change to gitweb/INSTALL.  Can anyone check if the information stated
there is correct?

This patch is based on a0446e7 commit (gitweb: Add support for
FastCGI, using CGI::Fast, 2010-05-07), currently in 'next' 
(from 'jn/gitweb-fastcgi' branch).

I have not actually tested that it runs as FastCGI script.

 gitweb/INSTALL     |   28 ++++++++++++++++++++++++++++
 gitweb/gitweb.perl |   21 +++++++++++++--------
 2 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/gitweb/INSTALL b/gitweb/INSTALL
index d484d76..617c9f4 100644
--- a/gitweb/INSTALL
+++ b/gitweb/INSTALL
@@ -230,12 +230,26 @@ $projects_list variable in gitweb config):
 	perl -- /var/www/cgi-bin/gitweb.cgi
 
 
+Running gitweb using FastCGI interface
+--------------------------------------
+
+To run gitweb as FastCGI script (using FastCGI interface), rather than
+plain CGI script, you need to either pass '--fastcgi' or '--fcgi' parameter
+to gitweb script, or rename it to 'gitweb.fcgi' (to end with '.fcgi'
+extension).  To run gitweb using FastCGI interface you need CGI::Fast
+and FCGI Perl modules installed.
+
+You can also pass '--nproc=<n>' parameter to gitweb script to configure how
+many FCGI::ProcManager processes to use.
+
+
 Requirements
 ------------
 
  - Core git tools
  - Perl
  - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename.
+   To run gitweb using FastCGI interface CGI::Fast and FCGI are needed.
  - web server
 
 
@@ -272,3 +286,17 @@ See also "Webserver configuration" section in README file for gitweb
 	    Order allow,deny
 	    Allow from all
 	</Directory>
+
+- Apache2, gitweb installed as 'gitweb.fcgi' FastCGI script,
+  under /var/www/fcgi-bin/
+
+	LoadModule fcgid_module modules/mod_fcgid.so
+
+	Alias /fcgi-bin "/var/www/fcgi-bin"
+
+	<Directory "/var/www/fcgi-bin">
+	    SetHandler fcgid-script
+	    Options +ExecCGI
+	    Order allow,deny
+	    Allow from all
+	</Directory>
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index c42c16f..47ef993 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1056,19 +1056,24 @@ our $is_last_request = sub { 1 };
 our ($pre_dispatch_hook, $post_dispatch_hook, $pre_listen_hook);
 our $CGI = 'CGI';
 our $cgi;
+sub configure_as_fcgi {
+	require CGI::Fast;
+	our $CGI = 'CGI::Fast';
+
+	my $request_number = 0;
+	# let each child service 100 requests
+	our $is_last_request = sub { ++$request_number > 100 };
+}
 sub evaluate_argv {
+	my $script_name = $ENV{'SCRIPT_NAME'} || $ENV{'SCRIPT_FILENAME'} || __FILE__;
+	configure_as_fcgi()
+		if $script_name =~ /\.fcgi$/;
+
 	return unless (@ARGV);
 
 	require Getopt::Long;
 	Getopt::Long::GetOptions(
-		'fastcgi|fcgi|f' => sub {
-			require CGI::Fast;
-			our $CGI = 'CGI::Fast';
-
-			my $request_number = 0;
-			# let each child service 100 requests
-			our $is_last_request = sub { ++$request_number > 100 };
-		},
+		'fastcgi|fcgi|f' => \&configure_as_fcgi,
 		'nproc|n=i' => sub {
 			my ($arg, $val) = @_;
 			return unless eval { require FCGI::ProcManager; 1; };
-- 
1.7.0.1

--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]