كيف يمكنني تثبيت إصدار بيرل تحت منزلي باستخدام 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.
المحلول
بناء على تعليقاتك هل لديك http_proxy
متغير ENV في قذيتك؟
$ env | grep http_proxy
إذا لم يكن الأمر كذلك ، فقم بتعيينه باستخدام إعدادات الوكيل الخاصة بك وإعادة تجهيز تثبيت perlbrew:
$ export http_proxy = "http://yourProxyURLorIP:8080"
$ perlbrew install perl-5.12.1
perlbrew
يستخدم هذا المتغير ENV لالتقاط خادم الوكيل. إذا لم يتم تعيين متغير ENV هذا ، فهو يحاول اتصال HTTP المباشر العادي (انظر خط 1274 في ماجستير الحالي على Github)
$ua->proxy($ENV{http_proxy}) if $ENV{http_proxy};
إذا لم ينجح ذلك ، فاحرص على إلقاء نظرة على HTTP::Lite
. هذا هو ما perlbrew
يستخدم تحت الغطاء لجلب رمز المصدر. NB. يستخدم Perlbrew نسخته الخاصة من HTTP :: Lite
أخيرًا ، إذا لم تكن حظًا ، فقد ذكرت أنك "قمت بتثبيته أولاً" عبر CPAN. يذكر المستندات المشكلات عند الترقية من نسخة CPAN السابقة. هذا ربما شيء آخر تحتاج إلى النظر فيه؟
تحديث إختبر هذا HTTP::Lite
البرنامج النصي واسمحوا لي أن أعرف ما تراه (nb. قد تحتاج إلى التثبيت 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!
أعتقد أنك ربما تعرضت لضرب مع خطأ معروف HTTP::Lite
, ، انظر قضية RT تفشل VARS Proxy Proxy Proxy Env في تعيين الوكيل والمنفذ بشكل صحيح.
الرمز أعلاه هو الحل لهذا الخطأ. أفترض أن نفس الخطأ في perlbrew
نسخة من HTTP::Lite
. إذا كان بعد ذلك يزيل http://
من HTTP_PROXY ENV ستحل المشكلة (الكلمات الأخيرة الشهيرة!)
تحديث 2
فقط لتوضيح تعليقي الأخير عند الركض perlbrew
يمكنك القيام بذلك (من شل مثل bash
):
http_proxy=IPaddr:Port perlbrew install perl-5.12.1
ستحتاج دائمًا إلى بادئة كل perlbrew
أمر مثل هذا ، على الأقل حتى HTTP::Lite
أو perlbrew
تم إصلاح علة الوكيل.
البديل أعلاه هو أنه يمكنك فقط تصحيح الإصدار المحلي الخاص بك فقط إضافة ما يلي قبل السطر 1277:
$ENV{http_proxy} = "IPaddr:Port"; # <= your proxy IP & port
نأمل أن قمنا أخيرًا بتكسيره! اسمحوا لي أن أعرف ما إذا كان كل شيء ناجحًا لأنه إذا كان الأمر كذلك ، فسوف أقوم بنشر إصلاح غوغود (مؤلف perlbrew
) مع التغييرات المحلية اللازمة ل HTTP::Lite
.