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