غريب apache2 :: خطأ ملفات تعريف الارتباط تحت الفراولة بيرل و mod_perl2

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

سؤال

لدي مجموعة من البرامج النصية التي تعمل تحت ActivePerl 5.10. ومع ذلك ، تحت الفراولة بيرل 5.10 ، أحصل على رسالة خطأ غريبة:

Can't locate object method "cookie_class" via package "MyCookie" (perhaps you forgot to load "MyCookie"?) at C:/strawberry/perl/site/lib/Apache2/Cookie.pm line 41.

لكن، MyCookie هو اسم ملف تعريف الارتباط نفسه ، وليس أي حزمة بيرل.

إذا قمت بتعليق السطر 41 من Cookie.pm ، فإن البرنامج النصي يعمل ، لكن لم يعد بإمكاني الحصول على ملفات تعريف الارتباط أو ضبطها بنجاح.

يبدو أن رسالة الخطأ صحيحة إلى حد ما من حيث أنني لا أستطيع العثور عليها cookie_class إما (باستثناء المكان الذي تم ذكره في ملفات POD.) هذا ، وينطبق الشيء نفسه على تثبيت ActivePerl الخاص بي.

أعتقد أنه في C:\strawberry\perl\site\lib\auto\APR\Request\Request.dll-كيف لا يمكن العثور عليها تحت الفراولة ، ولكن هل يمكن تحت ActivePerl؟

هل كانت مفيدة؟

المحلول

قم بتغيير الكود الخاص بك لاستخدام مخطط 2.x مثل:

my $j = Apache2::Cookie::Jar->new($r);
my $cookie = $j->cookies("MyCookie"); # works!  go figure...

بدلا من الطريقة القديمة:

local our %cookies = Apache2::Cookie->fetch($r); # error was happening here
local our $cookie = $cookies{"MyCookie"};

(لسبب ما يبدو أن هذا يصلحه.)

نصائح أخرى

هل ربما تقوم بخلط APREQ DLLs بين إصدارات الفراولة و ActivePerl؟ أو خلط APREQ-1 و APREQ-2 DLLS بطريقة ما؟

المنطقة المحيطة بالمخالفة cookie_class المكالمة هي فقط:

my $jar = $req->jar or return;
$jar->cookie_class(__PACKAGE__);
return $jar->get(shift) if @_;

ال cookie_class الطريقة تأتي من Request.dll و $req هل يتم فحص النوع من قبل jar() يسمى.

في مكان ما ، تقوم أنت أو أي شخص آخر بتمرير سلسلة إلى وظيفة تتوقع كائن. أفضل خطوة أولى في تصحيح الأخطاء هي التحميل الكارب :: دائما حتى تتمكن من الحصول على خلفية ومعرفة ما يحدث بالفعل.

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