RHEL 7上的Apache 2.4 - 替换CGI :: Compile

时间:2017-09-06 22:09:52

标签: amazon-web-services perl-module apache2.4 mod-perl rhel7

我目前正在将基于Perl的旧应用程序移植到AWS中。我成功地将Perl与Apache 2.4一起运行,甚至启动并运行了我的PostgreSQL数据库。

然后我继续配置Apache的httpd.conf以正确加载系统工作所需的所有资源。经过一些研究后,我得到了大部分的启动和运行。但是,我根本无法绕过LoadModule perl_module modules/mod_perl.so

根据我迄今为止所研究的内容,mod_perl.so已在RHEL 7上的Apache 2.4中弃用,并且如RHEL 7's website所示,此模块应替换为其他内容 - 他们建议{{1}但是在内部讨论了这个问题之后,我们决定选择mod_fcgidPSGI's CGI::Emulate::PSGI替代,主要是因为这样我们就不会搞砸几百个旧脚本来改变打印顺序。 / p>

然而,我无法让他们工作。尝试使用脚本调用它们会导致Perl找不到CGI::Compile,并且尝试通过CPAN安装此模块会导致错误CGI::Compile

下面是我使用的代码示例(文件myPSGIScript.psgi):

MIYAGAWA/CGI-Compile-0.22.tar.gz             : writemakefile NO '/usr/bin/perl Build.PL ' returned status 512

testScript.pl是我们的一个脚本的模拟,包括对CGI和我们需要的其他模块的调用,放在同一个文件夹中:

#!/usr/bin/perl

use strict;

use CGI::Compile;
use CGI::Emulate::PSGI;

my $sub = CGI::Compile->compile("/var/www/cgi-bin/testScript.pl");
my $app = CGI::Emulate::PSGI->handler($sub);

我是否误解了这些图书馆应该如何运作?我是否需要在Apache的#!/usr/bin/perl use strict; use CGI qw/:standard :html/; $CGI::HEADERS_ONCE++; $|=1; print header; use Pg; my $test = param('test'); print <<BlocoWeb; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>AWS Test</title> </head> <body> <center> <h1> I'm working - $test - </h1> <br> <form action='./testScript.pl'> <input type='text' name='test' value='$test'> <input type='submit'> </form> </center> </body> </html> BlocoWeb 或其他东西上导入它们?或者是别的什么?我应该放弃这个想法并使用httpd.conf代替 - 以及如何使用?

此外,mod_fcgid使我们能够在mod_perl标记内设置对我们的应用程序起作用至关重要的某些参数,即<VirtualHost>PerlOptions +GlobalRequest和{{1 }}。有没有办法使用这种方法来设置这些?

作为参考,我在亚马逊的AWS内部使用RHEL 7,Apache 2.4.6,Perl 5.16.3。

编辑:这不是我想要的答案,但它实际上解决了我的问题,因此我认为值得在这篇文章中添加以防万一。

经过大量研究后,我从Amazon's knowledge base中发现,你可以在RHEL 6和7以及他们所追求的其他发行版上实际获得PerlModule。您所要做的就是通过正确的命令启用Extra Packages。就我而言:

PerlSetVar

运行相应的命令后,运行mod_perl.so并检查以下存储库是否可用:

sudo yum install –y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

如果是,那么您已准备好运行sudo yum repolist并且它可以在Apache的conf文件中加载。

同样,这解决了我目前的问题,但Red Hat的信息很明确:除非你绝对需要,否则不要使用它。如果可以,将代码升级到另一个更新的模块是最好的选择。

0 个答案:

没有答案