This question about Installation of Foswiki: More info required
Undefined subroutine Foswiki::Request::rearrange
I have been successfully using 1.1.9. I downloaded 2.0.2, resolved missing perl modules and now I get
Undefined subroutine Foswiki::Request::rearrange
when I try
foswiki/Main
(or System or whatever) or
bin/configure
. Nothing is written in event.log or the apache log. I am running OSX Yosemite. I don't know what to do next to complete the installation and move my topics to 2.0.2.
--
TheodoreMankovich - 24 Oct 2015
Can you find out what version of CGI and perl is installed? It appears that Perl is getting confused and trying to call
Request::rearrange
instead of
CGI::Util::rearrange
. The following diff makes it explicit, and should avoid the issue.
diff --git lib/Foswiki/Request.pm Foswiki/Request.pm
index 071c736..949c790 100644
--- lib/Foswiki/Request.pm
+++ lib/Foswiki/Request.pm
@@ -264,7 +264,7 @@ Reasonably compatible with CGI corresponding method. Doesn't support
sub url {
my ( $this, @p ) = @_;
- my ( $relative, $absolute, $full, $base, $path_info, $query ) = rearrange(
+ my ( $relative, $absolute, $full, $base, $path_info, $query ) = CGI::Util::rearrange(
[
qw(RELATIVE ABSOLUTE FULL BASE), [qw(PATH PATH_INFO)],
[qw(QUERY_STRING QUERY)],
@@ -455,7 +455,7 @@ sub multi_param {
sub param {
my ( $this, @p ) = @_;
- my ( $key, @value ) = rearrange( [ 'NAME', [qw(VALUE VALUES)] ], @p );
+ my ( $key, @value ) = CGI::Util::rearrange( [ 'NAME', [qw(VALUE VALUES)] ], @p );
# param() - just return the list of param names
return @{ $this->{param_list} } unless defined $key;
@@ -504,7 +504,7 @@ sub cookie {
eval { require CGI::Cookie; 1 } or throw Error::Simple($@);
my ( $this, @p ) = @_;
my ( $name, $value, $path, $secure, $expires ) =
- rearrange( [ 'NAME', [qw(VALUE VALUES)], 'PATH', 'SECURE', 'EXPIRES' ],
+ CGI::Util::rearrange( [ 'NAME', [qw(VALUE VALUES)], 'PATH', 'SECURE', 'EXPIRES' ],
@p );
unless ( defined $value ) {
return keys %{ $this->{cookies} } unless $name;
@@ -607,7 +607,7 @@ Foswiki::Response =header= method.
sub header {
my ( $this, @p ) = @_;
- my ( $key, @value ) = rearrange( [ 'NAME', [qw(VALUE VALUES)] ], @p );
+ my ( $key, @value ) = CGI::Util::rearrange( [ 'NAME', [qw(VALUE VALUES)] ], @p );
return keys %{ $this->{headers} } unless $key;
$key =~ tr/_/-/;
If your system has the "patch" utility installed, you can save this patch to a file named
request.patch
in the root of your foswiki installation. Then execute the following command:
patch -p0 < request.patch
--
GeorgeClark - 24 Oct 2015
Thanks. Some progress but not there yet.
I applied the patch successfully. Now it gives me:
Undefined subroutine &CGI::Cookie::unescape called
My CGI is 3.63
perl is 5.18.2
--
TheodoreMankovich - 25 Oct 2015
I have no idea what's going on. CGI::Cookie::unescape() is actually CGI::Util::unescape, and it's the same patched above, but this time internal to CGI::Cookie. CGI::Cookie calls unescape and perl is picking up the wrong location. But since it's internal to CGI, I don't have a patch to suggest.
--
GeorgeClark - 25 Oct 2015
I had to install CGI::Session for 2.0.2. I used cpanm. It installed version 4.48. CGI.pm (version 3.63) on the other hand came with OSX and it is located in /System/Library/Perl/5.18. Session was installed in /Library/WebServer/Documents/Foswiki-2.0.2/lib/CPAN/lib/perl5/CGI/Session.pm. Is there some incompatability there. Maybe I should install all the needed CGI modules from cpanm. Should I try that?
--
TheodoreMankovich - 25 Oct 2015