2011-02-03 2 views
0

J'ai développé une application web sous CGI.pm.J'aimerais changer de mod_perl2. Mon webapp fonctionnait sous CGI mais quand j'ai essayé de changer le mod, ça ne fonctionne plus alors que je n'ai rien changé dans la webapp, sauf les fichiers apache conf pour fonctionner sous mod_perl.ModPerl :: RegistryPrefork devrait faire fonctionner mon ancien cgi mais

J'ai installé mod-perl2 et configurer mon VirualHost comme ceci:

Alias /project1/ /var/www/v6/cgi-bin/ 

PerlModule Apache::DBI 
PerlModule ModPerl::RegistryPrefork 

    <Directory /var/www/v6/cgi-bin/ > 

     PerlOptions -SetupEnv 
    SetHandler perl-script 
    PerlResponseHandler ModPerl::RegistryPrefork 
    PerlOptions +ParseHeaders 
    Options +ExecCGI 
    Order allow,deny 
    Allow from all 

    </Directory> 

Mon script ressemble. il utilise des modules/v6/cgi-bin/lib/

#!/usr/bin/perl 

    use lib qw(lib); 
    use strict; 
    use DBI; 
    use CGI; 
    use Template; 
    use CGI::Carp qw(fatalsToBrowser); 
    use Data::Dumper; 

    use Connexion; 
    use Search; 

    my $cgi  = new CGI; 

    our $fastdb = Connexion::database('1','1'); 
    my $get_description__id_sth = Search->get_description_id_sth(); 

Apache2 écrire l'erreur dans le journal:

[Jeu 3 février 2011 17:35:13] -e: DBI connect (':', '', ...) a échoué: Accès refusé pour l'utilisateur 'www-data' @ 'localhost' (en utilisant le mot de passe: NO) à ligne lib/Connexion.pm 134

Dans le navigateur j'ai:

peut appeler la méthode « préparer » à une valeur non définie à lib/ligne Search.pm 51.

Donc, je comprends que le script ne peut pas se connecter au database.But pourquoi ? Cela fonctionnait sur mod_cgi. Si quelqu'un a une idée:.?. »( Merci

+0

non * utiliser les avertissements; *, ici ou dans * Connexion * qui aurait attrapé le problème * $ var * dupliqué – MkV

+0

aussi, comme mentionné dans l'une des réponses, éteindre SetupEnv dans PerlOptions supprime une partie de la compatibilité entre mod_cgi et mod_perl – MkV

Répondre

1

Qu'est-ce que Connexion et que fait-il dans le DBI se connecter appel

Vous très probablement besoin de ne pas être invalidante setupenv

-1

Connexion est un module i fait pour connecter mes database.It est dans/cgi-bin/lib alors que mon script précédent l'appeler de/cgi-bin/

package connexion;.

use strict; 
use DBI; 
sub database{ 

    my ($var,$var) = @_; 
    my ($host1 ,$user1,$dbname1 ,$pass1)= ''; 

    if (($var== 1) and ($var ==1)){ 

     $host1    = 'localhost'; 
     $user1    = 'root'; 
     $dbname1   = 'BASE'; 
     $pass1    = '**'; 
    } 

return my $fastdb = DBI -> connect ('DBI:mysql:' . $dbname1 . ':' . $host1, $user1, $pass1); 
} 
1; 
+0

Manque quelques lignes (environ 120) là. Pourquoi ne pas simplement retourner avec DBI-> connect au lieu de définir une variable? Etes-vous sûr que * my ($ host1, $ utilisateur1, $ nombd1, $ pass1) = '' * fait ce que vous voulez? Enfin, vous devriez ajouter * RaiseError => 1 * aux options de connexion pour être informé des erreurs plus tôt. – MkV

+0

Aussi n'est pas la chaîne de connexion pour DBD :: mysql quelque chose comme: * "DBI :: mysql: base de données = $ nombd1; host = $ host1" *, pas * "DBI: mysql: $ dbname1: $ host1" *? Vraisemblablement le * $ var * dupliqué dans la ligne my et la ligne if sont des fautes de frappe (pourquoi ne pas simplement copier et pate) – MkV

+0

Vous n'avez pas vraiment montré assez de code ici pour être sûr, mais je pense que le problème doit faire avec ce que vous utilisez pour le mot de passe sur la ligne 134. Connextion.pm C'est ce que cette erreur vous dit: 'Accès refusé pour l'utilisateur 'www-data' @ 'localhost' (en utilisant le mot de passe: NO) sur lib/Connexion.pm ligne 134 –

Questions connexes