如何使用Perlbrew来管理针对Web应用程序的PERL安装?
-
05-10-2019 - |
题
我一直在使用 佩尔布鲁 在Linux Fedora笔记本上管理多个版本的Perl。我使用它具有很大的好处来运行命令行脚本主要使用 App :: CMD.
我现在想转到使用使用的Web应用程序编写的 CGI ::应用程序 在我的 $HOME
. 。我熟悉运行Perl Web应用程序 $HOME
S使用Apache的 user_dir
或创建虚拟主机,但我无法提出一种整合和Perlbrew托管Perls的干净方式。具体来说,我需要帮助理解和找到这些问题的答案:
- 如何在Perlbrew下安装mod_perl?
- 假设这是这样做的,我如何配置我的VirtualHost,以便拾取当前的正确perl?
- 如果不可能,(我怀疑)我至少可以使用本地安装来运行香草 CGI?
感谢您的关注。
解决方案
我认为这对Perlbrew的用途不是很好,Perlbrew在其自己的目录下绕着Symlink进行了移动。诀窍是将MOD_PERL模块切换。请记住,MOD_PERL将在Perl的主要版本之间是二进制的,并且您必须使用要使用的每个版本的Perl(和Apache)对Apache进行编译。
Perlbrew确实为您做了两件事:
- 安装Perl,这在您自己很容易做到这一点上很容易。
- 切换符号链接
perl
是您想要的任何版本。
如果您放弃最后一个,那么Perlbrew并没有为您做太多。我认为Symlink功能并不特别有价值。
我认为Perlbrew对它的本质很好,但是当您开始在有限的范围之外做事时,是时候不使用它了。它应该是节省一些时间和头痛的工具,因此,如果它没有实现该目标,则不是适合您情况的正确工具。
在这种情况下,我支持一个大型Web应用程序,我给它自己的Perl安装,我不让其他任何东西使用。
对于您的其他问题:
Markdown占位符
您不必配置任何
VirtualHost
东西。如果您使用的是mod_perl,则Perl已经在那里,并且您无法选择Perl。如果您使用的是CGI的东西,则在Shebang系列上指定PERL。您将必须确保Apache选择正确的图书馆目录,但我认为Perlbrew可以处理。您可能必须使用SetEnv
或您的httpd.conf中的类似内容。对于Vanilla CGI,只需指向默认Perlbrew版本的右侧(符号)路径。 CGI程序将只使用该路径指向的任何PERL。
其他提示
请参阅Brian D Foy的答案,以了解为什么不希望使用Perlbrew在MOD_PERL版本之间切换。我还希望您需要运行多个Apache服务器,如果您在MOD_PERL下需要多个不同的Perl版本。
但是,使用Perlbrew作为构建Perl的一种简单方法是恕我直言,这是有效的事情,并且很少有有关如何在Perlbrew下运行mod_perl的说明。
首先,通过传递-duseshrplib标志(否则,在64位系统上,您将获得令人困惑的构建失败-FPIC):
perlbrew install perl-5.16.3 -Duseshrplib
为您的系统安装开发Apache库。在Debian上,这取决于您使用的Apache MPM。对于预牛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 <your homedir>/perl5/perlbrew/perls/<your perl>/usr/lib/apache2/modules/mod_perl.so
您的mod_perl安装现在将运行所需的Perl版本。安装所有必需的CPAN模块并开始。