我一直在使用 佩尔布鲁 在Linux Fedora笔记本上管理多个版本的Perl。我使用它具有很大的好处来运行命令行脚本主要使用 App :: CMD.

我现在想转到使用使用的Web应用程序编写的 CGI ::应用程序 在我的 $HOME. 。我熟悉运行Perl Web应用程序 $HOMES使用Apache的 user_dir 或创建虚拟主机,但我无法提出一种整合和Perlbrew托管Perls的干净方式。具体来说,我需要帮助理解和找到这些问题的答案:

  1. 如何在Perlbrew下安装mod_perl?
  2. 假设这是这样做的,我如何配置我的VirtualHost,以便拾取当前的正确perl?
  3. 如果不可能,(我怀疑)我至少可以使用本地安装来运行香草 CGI?

感谢您的关注。

有帮助吗?

解决方案

我认为这对Perlbrew的用途不是很好,Perlbrew在其自己的目录下绕着Symlink进行了移动。诀窍是将MOD_PERL模块切换。请记住,MOD_PERL将在Perl的主要版本之间是二进制的,并且您必须使用要使用的每个版本的Perl(和Apache)对Apache进行编译。

Perlbrew确实为您做了两件事:

  • 安装Perl,这在您自己很容易做到这一点上很容易。
  • 切换符号链接 perl 是您想要的任何版本。

如果您放弃最后一个,那么Perlbrew并没有为您做太多。我认为Symlink功能并不特别有价值。

我认为Perlbrew对它的本质很好,但是当您开始在有限的范围之外做事时,是时候不使用它了。它应该是节省一些时间和头痛的工具,因此,如果它没有实现该目标,则不是适合您情况的正确工具。

在这种情况下,我支持一个大型Web应用程序,我给它自己的Perl安装,我不让其他任何东西使用。

对于您的其他问题:

  1. Markdown占位符

  2. 您不必配置任何 VirtualHost 东西。如果您使用的是mod_perl,则Perl已经在那里,并且您无法选择Perl。如果您使用的是CGI的东西,则在Shebang系列上指定PERL。您将必须确保Apache选择正确的图书馆目录,但我认为Perlbrew可以处理。您可能必须使用 SetEnv 或您的httpd.conf中的类似内容。

  3. 对于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模块并开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top