Dav*_*d B 2 perl install perlbrew
我已经安装了perlbrew,这似乎是一个很好的解决方案,但在实际尝试安装一些Perl版本时,我得到了一些毫无意义的错误:
$ perlbrew install perl-5.12.1
Attempting to load conf from /home/dave/perl5/perlbrew/Conf.pm
Fail to get http://search.cpan.org/dist/perl-5.12.1 (error: ) at /home/dave/perl5/perlbrew/bin/perlbrew line 1277.
Run Code Online (Sandbox Code Playgroud)
根据你的评论http_proxy,你的shell中是否设置了ENV变量?
$ env | grep http_proxy
Run Code Online (Sandbox Code Playgroud)
如果没有,请使用您的代理设置进行设置,然后重新尝试perlbrew install:
$ export http_proxy = "http://yourProxyURLorIP:8080"
$ perlbrew install perl-5.12.1
Run Code Online (Sandbox Code Playgroud)
perlbrew使用此ENV变量来获取代理服务器.如果未设置此ENV变量,则它会尝试正常的直接HTTP连接(请参阅Github上perlbrew当前主服务器中的第1274行)
$ua->proxy($ENV{http_proxy}) if $ENV{http_proxy};
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,那么看看HTTP::Lite.这是perlbrew在引擎盖下用于获取源代码的内容. NB.perlbrew使用自己的HTTP :: Lite副本
最后,如果仍然没有运气,你提到你通过CPAN"首先安装它".从以前的CPAN版本升级时,文档确实提到了问题.这可能是您需要进一步研究的内容吗?
更新 测试此HTTP::Lite脚本并告诉我您看到的内容(注意:您可能需要安装HTTP::Lite):
use strict;
use warnings;
use HTTP::Lite;
my $ua = HTTP::Lite->new;
$ua->proxy("yourProxyURLorIP:8080"); # <= http_proxy env minus "http://"
my $req = $ua->request( 'http://search.cpan.org/dist/perl-5.12.1/' )
or die "Unable to get document: $!";
print $ua->body(); # <= if you get this then all is good!
Run Code Online (Sandbox Code Playgroud)
我想你可能已经遇到了一个已知的bug HTTP::Lite,请参阅RT问题uri样式代理env vars无法正确设置代理和端口.
上面的代码是这个bug的解决方法.我假设同样的错误是perlbrew副本HTTP::Lite.如果它然后http://从您的http_proxy 删除ENV将解决问题(着名的遗言!)
更新2
只是为了让你的最后一个评论清楚,当你运行时perlbrew你可以这样做(从shell像bash):
http_proxy=IPaddr:Port perlbrew install perl-5.12.1
Run Code Online (Sandbox Code Playgroud)
你需要始终前缀每个perlbrew命令是这样,至少要等到HTTP::Lite或perlbrew代理的错误是固定的.
上面的替代方法是你可以修补你的本地版本,只需在第1277行之前添加以下内容:
$ENV{http_proxy} = "IPaddr:Port"; # <= your proxy IP & port
Run Code Online (Sandbox Code Playgroud)
希望我们终于破解了它!让我知道是否所有成功,因为如果是这样,那么我将发布一个修复Gugod(作者perlbrew)与必要的本地更改HTTP::Lite.
| 归档时间: |
|
| 查看次数: |
3108 次 |
| 最近记录: |