我想在我的 web 服务器上运行一个 Catalyst 应用程序,它具有系统 perl v5.10。我想至少为应用程序使用 v5.12。我不想干预系统 perl。
我们的系统管理员坚持认为该应用程序。由非 shell 用户运行(例如“nobody”)
我知道我可以使用 perlbrew 来使用非系统 perl 进行开发,但我不确定运行实时版本的最佳方法是什么。人们建议如何处理这种情况?
我想在我的 web 服务器上运行一个 Catalyst 应用程序,它具有系统 perl v5.10。我想至少为应用程序使用 v5.12。我不想干预系统 perl。
我们的系统管理员坚持认为该应用程序。由非 shell 用户运行(例如“nobody”)
我知道我可以使用 perlbrew 来使用非系统 perl 进行开发,但我不确定运行实时版本的最佳方法是什么。人们建议如何处理这种情况?
由于您熟悉 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
如果您不想要线程支持,请删除。)
授予nobody
(即每个人)对 perl 可执行文件和所有库(@INC
目录下的所有内容)的读取和执行权限。
将所有应用程序脚本(至少包括目录下的所有内容)中的 shebang 行更改为您要使用./scripts
的实例。perl
或者,如果您想灵活处理,请将 shebang 行指向指向所需perl
可执行文件的符号链接。确保此链接也可供nobody
.
每当您将符号链接指向不同版本的 Perl 时,重新启动您的应用程序。