كيف يمكنني تثبيت إصدار بيرل تحت منزلي باستخدام perlbrew؟

StackOverflow https://stackoverflow.com/questions/3718153

  •  02-10-2019
  •  | 
  •  

سؤال

لقد ركبت 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top