
Hi, nobody who cares about this ;-(? On Sam 22.12.2007 02:27, Aleksandar Lazic wrote:
Hi,
here are know the first steps for a better integration with nginx (http://nginx.net/) and lighty (http://www.lighttpd.net/).
They are able to connect to fast-cgi (fcgi) backends and the fcgi can behave like a apache with mod_perl ;-)
The files are:
index_new.fpl => the starting point it forks 5 (n_processes), write a pidfile (pid_fname). In this file depending on the request uri ($ENV{'REQUEST_URI'}) the different interfaces will be called.
fcgi-startup.pl => is mainly a copy from apache2-httpd-new.include.conf otrs-2.2.4.diff => I have changed some small parts in the otrs System an this are the diffs. otrs.nginx.conf => nginx configfile. Please pay attention that the socket (fastcgi_pass && FCGI_SOCKET_PATH) is rw for both users (otrs && nginx).
TODOs:
I have only tested it with a small setup. Better and bigger testing. Documentation.
start/stop script. I try to decide which process managment system to us, please can somebody help to find a 'good' way which you can go.
POE::Component::Pool::Thread (http://search.cpan.org/~tag/POE-Component-Pool-Thread-0.015/Thread.pm)
PTools::Proc::NWay http://search.cpan.org/~ccobb/PTools-Proc-NWay-0.09/lib/PTools/Proc/NWay.pm
Daemon::Generic http://search.cpan.org/~muir/Daemon-Generic-0.51/lib/Daemon/Generic.pod
Generic POE solution e.g. http://poe.perl.org/?POE_Cookbook/Web_Server_With_Forking
DJB's Daemontools http://cr.yp.to/daemontools.html
Other Ideas ;-)
Please tell me what you think and if this is the way otrs is able to go ;-)
Thanks & greetings
Aleks
#!/usr/bin/perl -w # -- # bin/fcgi-bin/index.fpl - the global FastCGI handle file (incl. auth) for OTRS # Copyright (C) 2001-2006 OTRS GmbH, http://otrs.org/ # -- # $Id: index.fpl,v 1.4 2006/08/26 17:33:32 martin Exp $ # -- # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # --
if (not defined $ENV{'FCGI_SOCKET_PATH'}){ die "Please export the 'FCGI_SOCKET_PATH'"; }
# use ../../ as lib location use FindBin qw($Bin); use lib "$Bin/../.."; use lib "$Bin/../../Kernel/cpan-lib";
use vars qw($VERSION @INC); $VERSION = '$Revision: 1.4 $'; $VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
# check @INC for mod_perl (add lib path for "require module"!) push (@INC, "$Bin/../..", "$Bin/../../Kernel/cpan-lib");
# Imports the library; required line use CGI::Fast; use strict; use FCGI::ProcManager;
# load agent web interface use Kernel::System::Web::InterfaceAgent();
require "scripts/fcgi-startup.pl";
# create common objects my %CommonObject = (); $CommonObject{ConfigObject} = Kernel::Config->new(); $CommonObject{LogObject} = Kernel::System::Log->new( LogPrefix => 'FCGI-Starter', ConfigObject => $CommonObject{ConfigObject}, ); #$CommonObject{MainObject} = Kernel::System::Main->new(%CommonObject); #$CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject);
my $proc_manager = FCGI::ProcManager->new({ n_processes => 5 , pid_fname => 'fcgi.pid' });
# 0=off;1=on; my $Debug = 03; my $FCGI_Mode = 1; #my $Cnt = 0;
$proc_manager->pm_manage();
# Response loop while (my $WebRequest = new CGI::Fast) {
my $Interface;
$CommonObject{LogObject}->Log( Priority => 'Debug', Message => "index_new.fpl:".$ENV{'REQUEST_URI'}, );
$proc_manager->pm_pre_dispatch();
if ( $ENV{'REQUEST_URI'} =~ /index\.fpl/o ){ # create new object $Interface= Kernel::System::Web::InterfaceAgent->new(Debug => $Debug, WebRequest => $WebRequest , FCGI_Mode => $FCGI_Mode); } elsif ( $ENV{'REQUEST_URI'} =~ /customer\.fpl/o ){ # create new object $Interface = Kernel::System::Web::InterfaceCustomer->new(Debug => $Debug, WebRequest => $WebRequest); } elsif ( $ENV{'REQUEST_URI'} =~ /public\.fpl/o ){ # create new object $Interface = Kernel::System::Web::InterfacePublic->new(Debug => $Debug, WebRequest => $WebRequest); }
$Interface->Run();
$proc_manager->pm_post_dispatch();
# $Cnt++; # print STDERR "This is connection number $Cnt\n"; }
Only in otrs-2.2.4_fcgi/bin/fcgi-bin: index_new.fpl diff -ru otrs-2.2.4/Kernel/System/DB.pm otrs-2.2.4_fcgi/Kernel/System/DB.pm +++ otrs-2.2.4_fcgi/Kernel/System/DB.pm 2007-12-20 13:06:49.000000000 +0100 @@ -76,6 +76,8 @@ # 0=off; 1=updates; 2=+selects; 3=+Connects; $Self->{Debug} = $Param{Debug} || 0;
+ $Self->{FCGI_Mode} = $Param{FCGI_Mode} || 0; + # check needed objects foreach (qw(ConfigObject LogObject MainObject)) { if ($Param{$_}) { @@ -794,7 +796,9 @@
sub DESTROY { my $Self = shift; - $Self->Disconnect(); + if (!$Self->{FCGI_Mode}) { + $Self->Disconnect(); + } return 1; } 1; diff -ru otrs-2.2.4/Kernel/System/Web/InterfaceAgent.pm otrs-2.2.4_fcgi/Kernel/System/Web/InterfaceAgent.pm +++ otrs-2.2.4_fcgi/Kernel/System/Web/InterfaceAgent.pm 2007-12-20 13:05:55.000000000 +0100 @@ -67,6 +67,8 @@ # get debug level $Self->{Debug} = $Param{Debug} || 0;
+ $Self->{FCGI_Mode} = $Param{FCGI_Mode} || 0; + # performance log $Self->{PerformanceLogStart} = time();
@@ -707,16 +709,29 @@ Comment => 'Please contact your admin' ); } + + # debug info if ($Self->{Debug}) { - $Self->{LogObject}->Log( - Priority => 'debug', + $Self->{LogObject}->Log( + Priority => 'debug', Message => 'Global handle stopped.', ); } - # db disconnect && undef %Param - $Self->{DBObject}->Disconnect(); - undef %Param; + + if (!$Self->{FCGI_Mode}) { + # db disconnect && undef %Param + $Self->{DBObject}->Disconnect(); + }else{ + if ($Self->{Debug}) { + $Self->{LogObject}->Log( + Priority => 'debug', + Message => 'DB connection NOT Disconnected.', + ); + } + } + + undef %Param; }
1; Only in otrs-2.2.4_fcgi/scripts: fcgi-startup.pl
user nobody; worker_processes 5;
#error_log logs/error.log; #error_log logs/error.log debug; #error_log logs/error.log notice; error_log logs/error.log info;
#pid logs/nginx.pid;
events { worker_connections 1024; }
http { include mime.types; default_type application/octet-stream;
log_format timing '$remote_addr [$time_local] $request $status ' 'msec $msec upstream_response_time $upstream_response_time ' 'upstream_status $upstream_status';
access_log logs/access.log combined;
sendfile on; #tcp_nopush on;
#keepalive_timeout 0; keepalive_timeout 65;
#gzip on;
# another virtual host using mix of IP-, name-, and port-based configuration # server { listen 8000; server_name _;
client_max_body_size 15m;
location /otrs-web { alias /home/otrs/download/otrs/otrs-2.2.4/var/httpd/htdocs; }
location / { root /opt/otrs/var/httpd/htdocs/; # FCGI_SOCKET_PATH in the fcgi-process env fastcgi_pass unix:/home/otrs/sock/otrs.sock; fastcgi_index index.fpl; fastcgi_param SCRIPT_FILENAME /opt/otrs/bin/fcgi-bin$fastcgi_script_name; include fastcgi_params; # index index.html index.htm; } } }
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev