我正在尝试从一个基于PHP的网站中启动一个perl脚本。在那个perl脚本中,我使用的是一个包,它安装在一个非标准位置上。因此,为了使该位置上的所有包都可用,而不启动perl作为"perl -I /path/ to / packages ",或者放置"lib /path/ to /packages“;在我制作的每个perl脚本中,我都向PERL5LIB环境系统变量添加了"/path/to/packages”,当常规用户执行该脚本时,一切正常。但是,当该perl -脚本从网站启动时,所有环境系统变量似乎都无法访问(在perl中使用$ENV{"PERL5LIB"}和$ENV{"LOGNAME"}测试,两者都未初始化),导致perl脚本崩溃,因为它无法在@INC中找到所需的包。
我如何使那些perl包可以从网站上发布,而不使用"perl -I /path/to/ script.pl“,而不将"lib /path/to/packages”放在每个perl脚本之上呢?
发布于 2014-02-21 08:23:21
我向系统管理员寻求帮助,发现我们使用的不是apache (如预期的),而是nginx。尽管如此,解决方案是将PERL5LIB定义添加到/etc/nginx/ solution _params文件中,如下所示:
sudo echo 'fastcgi_param PERL5LIB "custom/path/to/perl/modules";' >> /etc/nginx/fastcgi_params
sudo service nginx reload谢谢你@LenJaffe和@ right 1126070为我指明了正确的方向!
发布于 2014-02-12 14:55:19
解决这个问题有两种可能的方法:
如果您拥有/访问web服务器,则可以全局添加变量。
(用于apache) id=844715
<Directory /var/www/>
SetEnv PERL5LIB /your/lib/path另一个解决方法是,您可以设置和维护与脚本相关的库,然后从您的perl脚本中获得它。为此,请查看FindBin模块。perl.html
您可以将脚本./bin/和库存储在./lib/。
如果您使用的库不止一个,可以将其链接到./lib/。
#!/usr/bin/perl
use FindBin ();
use lib "$FindBin::Bin../lib/";
use test;
print "test.pm => $INC{'test.pm'}\n";发布于 2014-02-12 14:57:05
您必须确保PER5LIB设置在您的web服务器启动的环境中。
您需要查阅手册才能找到设置环境变量的配置命令,或者需要修改启动脚本(例如apachectl),添加逻辑以正确设置PERL5LIB。
啊..。在我发这篇文章的同时,有人在发例子.
https://stackoverflow.com/questions/21729877
复制相似问题