6

我想在我的 web 服务器上运行一个 Catalyst 应用程序,它具有系统 perl v5.10。我想至少为应用程序使用 v5.12。我不想干预系统 perl。

我们的系统管理员坚持认为该应用程序。由非 shell 用户运行(例如“nobody”)

我知道我可以使用 perlbrew 来使用非系统 perl 进行开发,但我不确定运行实时版本的最佳方法是什么。人们建议如何处理这种情况?

4

2 回答 2

6

由于您熟悉 perlbrew,您仍然可以使用它来安装 Perl。

perlbrew install 5.16.1 --as=5.16.1t -Dusethreads

您只需确保您授予适当的权限。说你$PERLBREW_ROOT/home/djh/perl5/perlbrew(默认):

chmod a+x /home/djh/
chmod a+x /home/djh/perl5/
chmod a+x /home/djh/perl5/perlbrew/
chmod a+x /home/djh/perl5/perlbrew/perls/
chmod -R a+rX /home/djh/perl5/perlbrew/perls/5.16.1t/  # Capital "X"!!!

然后在脚本中使用以下 shebang 行:

#!/home/djh/perl5/perlbrew/perls/5.16.1t/bin/perl

但也许你不希望它在你的家里。如果是这样,您可以这样做:

cd /tmp
wget http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.1.tar.bz2
tar xvjf perl-5.16.1.tar.bz2
cd perl-5.16.1
sh Configure -des -Dprefix=/opt/perls/5.16.1t -Dusethreads
make test

sudo mkdir /opt/perls/5.16.1t
sudo chown djh:djh /opt/perls/5.16.1t
make install

安装程序将正确设置权限。您所要做的就是将 shebang 设置为

#!/opt/perls/5.16.1t/bin/perl

(“t”是我对线程构建的约定。-Dusethreads如果您不想要线程支持,请删除。)

于 2012-08-30T16:10:28.763 回答
4

授予nobody(即每个人)对 perl 可执行文件和所有库(@INC目录下的所有内容)的读取和执行权限。

将所有应用程序脚本(至少包括目录下的所有内容)中的 shebang 行更改为您要使用./scripts的实例。perl或者,如果您想灵活处理,请将 shebang 行指向指向所需perl可执行文件的符号链接。确保此链接也可供nobody.

每当您将符号链接指向不同版本的 Perl 时,重新启动您的应用程序。

于 2012-08-30T15:40:52.883 回答