غريب apache2 :: خطأ ملفات تعريف الارتباط تحت الفراولة بيرل و mod_perl2
-
30-09-2019 - |
سؤال
لدي مجموعة من البرامج النصية التي تعمل تحت 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()
يسمى.
في مكان ما ، تقوم أنت أو أي شخص آخر بتمرير سلسلة إلى وظيفة تتوقع كائن. أفضل خطوة أولى في تصحيح الأخطاء هي التحميل الكارب :: دائما حتى تتمكن من الحصول على خلفية ومعرفة ما يحدث بالفعل.