perl – 模块(不是?)正在安装,因为它是最新的(是吗?)

我正在尝试部署到dotcloud.

我的Makefile.PL指出我需要URI 1.60. development.yml文件也说明了这一点.构建器声称已安装该模块.

18:38:39: [www] I am snapshotsworker_02/bob-3, and I will be your builder today.
18:38:55: [www] URI is up to date. (1.60)

如果我跑

dotcloud run www -- perl -MURI -e '1'

它失败了

Can't locate URI.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
BEGIN failed--compilation aborted.

这可能是正确的,因为通常模块安装在〜/ perl5下.所以,我尝试过:

$dotcloud run www -- perl -I /home/dotcloud/perl5/lib/perl5 -MURI -e '1'
==> Executing "perl -I /home/dotcloud/perl5/lib/perl5 -MURI -e 1" on service (www) instance #0 (application XXXX)
Can't locate URI.pm in @INC (@INC contains: /home/dotcloud/perl5/lib/perl5 /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
BEGIN failed--compilation aborted.

同样奇怪的是cpanm不可用,虽然文档说我们可以使用它:

$dotcloud run www -- cpanm URI
==> Executing "cpanm URI" on service (www) instance #0 (application XXXX)
bash: cpanm: command not found

任何提示?

编辑:这个模块似乎没有问题.和LWP一样.然后,更奇怪的是,HTTP :: Date是对LWP的依赖.某些东西在模块依赖项上无法正常工作.我从来没有遇到旧版本的dotcloud客户端的这个问题.

谢谢,
阿尔贝托

最佳答案 这种行为的原因很简单,但也很愚蠢.在这里,dotcloud的人可能会更专业,并且可以更好地配置Perl堆栈.

所以,在我的dotcloud.yaml文件中,我请求安装perl 5.14.x.这是通过在/ opt / perl5 / perls / current中添加指向我想要的版本的符号链接(在我的例子中为/opt/perl5/perls/perl5.14.x/)来完成的.对于Perl Web堆栈,环境的设置方式是首先搜索此perl.

当我通过cron作业或通过dotcloud客户端的运行选项运行perl时,回答的perl是系统中的perl(/usr/bin/perl),即perl版本5.10.x.因此,在perl 5.14.x版本中系统安装的模块不可用(当我强制它们安装到perl5 home目录时,它们可用于两个版本).

解决方案是使用正确的路径调用perl二进制文件,或者为标准shell环境正确配置PATH环境变量(这似乎与Web环境不同).

如果dotcloud的人们更加透明,那就太好了.一种选择是记录此问题,另一种选择是将shell环境设置为使用与Web环境相同的perl.这不应该那么难.

阿尔贝托

点赞