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
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users