Gareth Kirwan wrote:
>> Recently I started using Lighttpd (http://www.lighttpd.net) to serve 
>> FASTCGI applications, and was surprised to know that the Mason engine 
>> can also be placed inside a FASTCGI wrapper and served with this web 
>> server. Previously I had an old install using Apache 1.3.27, which I 
>> converted to Lighttpd 1.4.13 and have seen speed improvements of up to 
>> 400% when generating dynamic content.
> 
> I've been tempted to play with lighttpd before, but haven't got around to it
> yet.
> What do you use in place of $r, and how is your mason handler set up?
> 
> G
> 
> 

I basically followed suggestions on the Lighttpd wiki, but here is my 
config:

...
static-file.exclude-extensions += ( ".fcgi" )
fastcgi.map-extensions = (
   "/" => ".html"
  ,"autohandler" => ".html"
  ,"dhandler" => ".html"
)
fastcgi.server = (
   ".html" =>
   ((
    "socket" => "/tmp/mason.sock",
    "bin-path" => "/usr/local/supervise/lighttpd/mason.fcgi",
    "check-local" => "disable",
    "max-procs" => 3
   ))
)
...

Please note that in my case, because I have limited RAM on the server, I 
only start 3 fastcgi instances, but if you need to, you could setup as 
many as your setup will allow (the default is 4 if you skip the 
"max-procs" directive.

Here is the handler (mason.fcgi):

 >>>BEGIN>>>
#!/usr/local/bin/perl 

#vim: et ts=4 sw=4

use strict; 

use HTML::Mason::CGIHandler; 

use CGI::Fast; 


{ 

   package HTML::Mason::Commands;
   # anything you want available to components
   use DBI;
   use lib qw(
       /usr/local/rrdtool/lib/perl
       /usr/local/mrtg-2/lib/mrtg2
       );
   use RRDs;
   use MRTG_lib "2.090017";
}

# lazily-instantiated variables
my $cgi;
my $h;

$ENV{MASON_COMP_ROOT} = '/home/mrtg/site';
$ENV{MASON_DATA_ROOT} = '/home/mrtg/mason-prod';

while ($cgi = new CGI::Fast) {

   # this seems to be necessary as lighttpd does not provide the
   # PATH_INFO and the QUERY_STRING environment variables
   # Note that the below seems to work but I have no idea if it's
   # the 'right' way to parse the REQUEST_URI out into
   # PATH_INFO and QUERY_STRING
   my $uri = $ENV{REQUEST_URI};
   if ($uri =~ /\?/) {
     $uri =~ /^(.*?)\?(.*)/;
     $ENV{PATH_INFO} = $1;
     $ENV{QUERY_STRING} = $2;
   } else {
     $ENV{PATH_INFO} = $uri;
     $ENV{QUERY_STRING} = "";
   }

   # this is lazily instantiated because %ENV is not set at startup time
   if (! $h) {
     $h = HTML::Mason::CGIHandler->new(
         comp_root => $ENV{MASON_COMP_ROOT},
         data_dir => $ENV{MASON_DATA_ROOT},
         error_format => 'html',
         allow_globals => [ qw($dbh %Users) ]
         );
   }

   # hand off to mason
   eval { $h->handle_cgi_object($cgi) };
   if (my $raw_error = $@) {
     # print out a pretty system error page and log $raw_error
     print $raw_error;
     exit;
   }
}

exit 0;
<<<END<<<

Jorge

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to