Странный Apache2 :: Ошибка Cookie под Strawberry Perl и mod_perl2 - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть набор скриптов, которые работают под ActivePerl 5.10.Однако в Strawberry Perl 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 - это имя самого файла cookie, а не пакета Perl.

Если я комментируюВ строке 41 файла Cookie.pm сценарий запускается, но я больше не могу успешно получать или устанавливать файлы cookie.

Сообщение об ошибке выглядит несколько корректным, поскольку я тоже не могу найти cookie_class (кроме случаев, когда это упоминалосьв файлах POD.) Тем не менее, то же самое относится и к моей установке ActivePerl.

Я думаю, что это в C:\strawberry\perl\site\lib\auto\APR\Request\Request.dll - почему он не может найти его под Strawberry, но может под ActivePerl?

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

Измените свой код, чтобы использовать схему 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"};

(По какой-то причине это казалось исправлением.)

1 голос
/ 10 ноября 2010

Возможно, вы смешиваете apreq DLL между версиями Strawberry и ActivePerl?Или как-то смешивать DLL-библиотеки apreq-1 и apreq-2?

Область вокруг вызывающего вызова cookie_class выглядит так:

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

Метод cookie_class происходит от Request.dll и $req проверяется типом перед вызовом jar().

0 голосов
/ 10 ноября 2010

Где-то вы или кто-то другой передаете строку функции, которая ожидает объект. Ваш лучший первый шаг в отладке - загрузить Carp :: Always , чтобы вы могли получить обратную трассировку и выяснить, что на самом деле происходит.

...