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

时间:2012-11-24 18:51:53

标签: perl uri cpan dotcloud

我正在尝试部署到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客户端的这个问题。

谢谢你, 阿尔贝托

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

阿尔贝托