[prev] [thread] [next] [Date index for 2004/06/11]
I'm trying to build a WebApp for a databse using CDBI and CGI::Builder, but am haveing some problems with the persistance of the DB conncetion between tow invocations of the script. I need the username and password to perform a per user login to the DB, which I use as authentication method to the App. The dbh created by the login-subroutine should then be the dbh for the CDBI session. Thatfor I'm inheriting my base class fromm CDBI::BaseDSN and loading the table classes after by a require when they are needed by the Pagehandlers of the App, i.e after the login process. Here is waht I'M; doinmg right now. WebKRaM.cgi: use WebKraM; $|=1; my $webapp = WebKraM->new() ; $webapp->process() ; ------------ WebKraM.pm: package WebKraM; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use CGI::Builder qw| CGI::Builder::Magic CGI::Builder::Session CGI::Builder::Test |; use base 'DbKraM'; sub OH_pre_process { my $self = shift; $self->cs->param('logged_in') || $self->switch_to('login'); } sub SH_login { my $self = shift; my $user = $self->cgi->param("user"); my $passw= $self->cgi->param("passw"); my $host = "localhost"; my $database = "KraM"; my $dsn = "DBI:Pg:dbname=$database;host=$host"; eval { $self->set_db( Main => $dsn, $user, $passw ); }; my $p = $self->cgi->param('p'); if ( DbKraM->login($user, $passw) ) { $self->cs->param("logged_in", 1); if ( $p and ($p ne 'login') ){ return $self->switch_to($p); } else { return $self->switch_to('main'); } } } sub PH_data_table { require DbKraM::data_table; my $self = shift; my $obj = DbKraM::data_table->retrieve( $self->cgi->param("$who.id") ); # ....do something usefull with $obj } 1; ------------ DbKraM.pm: package DbKraM; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use base 'Class::DBI::BaseDSN'; sub login{ my $self = shift; my ($user, $passw) = @_; my $host = "localhost"; my $database = "KraM"; my $dsn = "DBI:Pg:dbname=$database;host=$host"; my $dbh; eval { $self->set_db( Main => $dsn, $user, $passw ); }; eval { $dbh = DbKraM->db_Main; }; return $@ ? 0 : 1; } 1; ------------ DbKraM/data_table.pm package DbKraM::eltern; use DbKraM; __PACKAGE__->set_up_table('eltern'); 1; ------------ The problem arise when the package DbKraM::data_table is required. The script breaks with the message like: Fatal error in phase PRE_PROCESS for page "eltern": DBI connect('dbname=KraM;host=localhost','',...) failed: FATAL: user "www-data" does not exist at /usr/share/perl5/Ima/DBI.pm Any suggestions? --- regards, Andreas Fromm
Problem with persistance of connection under mod_perl
|
Generated at 11:34 on 01 Dec 2004 by mariachi v0.52