ModPerl::RegistryPrefork 应该能让我的旧 cgi 工作,但是

发布于 2024-10-16 01:27:18 字数 1346 浏览 3 评论 0原文

我在 CGI.pm 下开发了一个网络应用程序。我想切换到 mod_perl2。 我的 web 应用程序在 CGI 下工作,但是当我尝试更改 mod 时,它不再工作,而我没有更改 web 应用程序中的任何内容,除了在 mod_perl 下运行的 apache conf 文件。

我已经安装了 mod-perl2 并像这样配置我的 VirualHost:

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>

我的脚本看起来像 .他使用 /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 中的一些模块在日志中写入错误:

[2011 年 2 月 3 日星期四 17:35:13] -e:DBI 连接(':','',...)失败:访问 用户“www-data”@“localhost”被拒绝 (使用密码:NO)位于 lib/Connexion.pm 第 134 行

在浏览器中我有:

无法调用“准备”方法 lib/Search.pm 行中的未定义值 51.

所以我明白脚本无法连接到数据库。但是为什么呢? 它正在 mod_cgi 上运行。 如果有人有想法:'( 谢谢。

I developped a web app under CGI.pm.I'd like to switch to mod_perl2.
My webapp worked under CGI but when i tried to change the mod, it's not working anymore while I didn't change anything in the webapp ,except the apache conf files to run under mod_perl.

I have installed mod-perl2 and configure my VirualHost like this :

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>

My script looks like . he uses some modules in /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 write the error in the log :

[Thu Feb 3 17:35:13 2011] -e: DBI
connect(':','',...) failed: Access
denied for user 'www-data'@'localhost'
(using password: NO) at
lib/Connexion.pm line 134

In the browser i have :

Can't call method "prepare" on an
undefined value at lib/Search.pm line
51.

So i understand that the script can't connect to the database.But why?
It was working on mod_cgi.
If someone has an idea :'(
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里寻她 2024-10-23 01:27:18

Connexion 是什么?它在 DBI 连接调用中做什么?

您很可能不需要禁用SetupEnv。

What is Connexion and what is it doing in the DBI connect call?

You very likely need to not be disabling SetupEnv.

茶色山野 2024-10-23 01:27:18

Connexion 是我为连接数据库而制作的模块。它位于 /cgi-bin/lib 中,而我之前的脚本从 /cgi-bin/ 目录调用他。

封装连接;

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;

Connexion is a module i made for connecting my database.It's in /cgi-bin/lib whereas my previous script call him from /cgi-bin/ directory.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文