我一直在使用perlbrew来管理Linux Fedora笔记本上的多个perl版本.我使用它非常有益,主要使用App :: cmd运行命令行脚本.
我现在想要使用安装在我的不同的perls中运行使用CGI :: Application编写的Web应用程序$HOME
.我熟悉$HOME
使用Apache 运行Perl Web应用程序user_dir
或创建虚拟主机,但我无法想出一种简洁的方法来集成这个和perlbrew管理的perls.具体来说,我需要帮助理解并找到这些问题的答案:
如何在perlbrew下安装mod_perl?
假设已经完成,我如何配置我的VirtualHost,以便它获取当前的正确perl?
如果这是不可能的,(我怀疑)我至少可以使用本地安装来运行vanilla CGI吗?
感谢您的关注.
我认为这不是一个很好用的perlbrew,它在自己的目录下移动符号链接.诀窍是切换mod_perl模块.请记住,mod_perl在perl的主要版本之间将是二进制不兼容的,并且你必须针对你想要使用的每个perl(和apache)版本针对apache编译它.
perlbrew真的为你做了两件大事:
安装perl,这很容易自己做.
切换符号链接,以便perl
您可以使用任何版本.
如果你放弃了最后一个,perlbrew对你来说并没有那么多.我不认为符号链接功能特别有价值.
我认为perlbrew很适合它,但是当你开始做有限范围之外的事情时,是时候不使用了它.它应该是一个节省你一些时间和头痛的工具,所以如果它没有实现这个目标,它不适合你的情况.
在这种情况下,我支持单个大型Web应用程序,我给它自己的perl安装,我不会让任何其他东西使用.
对于您的其他问题:
降价占位符
你不应该配置任何VirtualHost
东西.如果您使用的是mod_perl,那么perl已经在那里,您无法选择perl.如果你正在使用CGI的东西,你在shebang线上指定perl.你必须确保apache选择正确的库目录,但我认为perlbrew会处理它.您可能必须SetEnv
在httpd.conf中使用或类似的东西.
对于vanilla CGI,只需指向默认perlbrew版本的右侧(符号链接)路径即可.CGI程序将使用路径所指向的perl.
请参阅brian d foy的回答,了解为什么不期望使用perlbrew在mod_perl版本之间切换.如果在mod_perl下需要多个不同的Perl版本,我还希望你需要运行多个Apache服务器.
但是,使用perlbrew作为构建Perl的简单方法是恕我直言,这是一个有效的事情,并且有很少的指令可用于如何在perlbrew下运行mod_perl.
首先通过传递-Duseshrplib标志来确保perl是通过共享库支持构建的(否则在64位系统上,您将获得关于-fPIC的令人困惑的构建失败):
perlbrew install perl-5.16.3 -Duseshrplib
为您的系统安装开发Apache库.在Debian上,这取决于您使用的Apache MPM.对于prefork MPM:
sudo apt-get install apache2-prefork-dev
或者对于工人MPM:
sudo apt-get install apache2-threaded-dev
然后你需要一些选项来构建和安装mod_perl2到正确的位置.请注意,这意味着cpanm将无法构建它,但您可以使用它来获取源:
cpanm mod_perl2 # fails cd ~/.cpanm/latest-build/mod_perl-2.0.8/ # adjust mod_perl version
相应地调整下面的Perl版本.(MP_APXS选项是为基于Debian的系统提供正确的路径,您可能不需要它.)
perl Makefile.PL MP_APXS=/usr/bin/apxs2 \ MP_AP_DESTDIR=$HOME/perl5/perlbrew/perls/perl-5.16.3/ make make install
最后,更改Apache配置文件中的LoadModule行(相应地调整路径):
LoadModule perl_module/perl5/perlbrew/perls/ /usr/lib/apache2/modules/mod_perl.so
您的mod_perl安装现在将运行您想要的Perl版本.安装所有必需的CPAN模块并开始使用.