我目前正在将基于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_fcgid
和PSGI'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的信息很明确:除非你绝对需要,否则不要使用它。如果可以,将代码升级到另一个更新的模块是最好的选择。