[Catalyst] Argh! Trying to upgrade Catalyst -- getting "Can't use string as a HASH ref..."

will trillich will.trillich at serensoft.com
Sat Mar 30 16:04:16 GMT 2013


We have a Catalyst app "Waste::Web" that has been running fine and we are
trying to upgrade to a more modern set of libraries via "cpanm". (One
library was upgraded that caused conflicts, now we're running a sweep to
get everything updated...)

We have an old app called "Spills" that still runs fine. The problem is
with a different old app called "Waste::Web"... It won't start, throwing
the "can't use string as HASH ref" error, neither as standalone server for
testing nor via apache. Suggestions?



At first we thought maybe the script formats had changed. So we ran a quick
sample "catalyst.pl Catalyst::Upgrade" to come up with the latest structure
for comparison. This I'll call "new script" below. Then we looked at the
script/*pl files, the lib/* files. None of the structures seem to have
changed from what we can tell.

That is, the old script/*server.pl script has the same standard structure
as the brand new script:

#!/usr/bin/env perl
BEGIN {
    $ENV{CATALYST_SCRIPT_GEN} =3D 40;
}
use Catalyst::ScriptRunner;
Catalyst::ScriptRunner->run('Waste::Web', 'Server');
1;

Comparing lib/Waste/Web.pm (old script) to lib/Catalyst/Upgrade.pm (new
script) also looks similar -- commented code redacted for space:

package Waste::Web;
use Moose;
use namespace::autoclean;

use Catalyst::Runtime 5.80;

use Catalyst qw/
    ConfigLoader
    Static::Simple
        Session
        Session::Store::DBIC
        Session::State::Cookie
        Authentication
        Authentication::Credential::Password
        Authorization::Roles
    Cache
/;
use Waste::Lib::CSV;

extends 'Catalyst';

our $VERSION =3D '1.10';

__PACKAGE__->config(
    name =3D> 'Waste::Web',
    # Disable deprecated behavior needed by old applications
    disable_component_resolution_regex_fallback =3D> 1,
);

# Start the application
__PACKAGE__->setup();

In the new script there *is* a new option to the __PACKAGE__->config call
but it's just to instantiate the X-Catalyst http header. All serious
structures look the same.

But Catalyst::Upgrade runs just fine, and an old app Spill runs just fine,
where Waste::Web throws the error:

Waste$ *perl script/waste_web_server.pl *
Can't use string ("Waste::Web") as a HASH ref while "strict refs" in use at
/usr/share/perl5/Class/Accessor/Fast.pm line 10.
Compilation failed in require at
/usr/local/share/perl/5.10.1/Catalyst/ScriptRunner.pm line 50.

Waste$ *cd ../Catalyst-Upgrade/*
Catalyst-Upgrade$ perl script/catalyst_upgrade_server.pl
HTTP::Server::PSGI: Accepting connections at http://0:3000/

Any ideas why we'd be getting this error?

Here's the single-step debug log:

Catalyst::Script::Server::run(/usr/local/share/perl/5.10.1/Catalyst/Script/=
Server.pm:240):
DB<1> *v*
237             $self->pidfile->write
238:                if $self->_has_pidfile;
239
240=3D=3D>          $self->_run_application;
241         }
242
243
244     }
245
246     sub _plack_loader_args {

DB<1> *s*
Catalyst::ScriptRole::_run_application(/usr/local/share/perl/5.10.1/Catalys=
t/ScriptRole.pm:88):
88:         my $self =3D shift;

DB<1> *n*
Catalyst::ScriptRole::_run_application(/usr/local/share/perl/5.10.1/Catalys=
t/ScriptRole.pm:89):
89:         my $app =3D $self->application_name;

DB<1> *n*
Catalyst::ScriptRole::_run_application(/usr/local/share/perl/5.10.1/Catalys=
t/ScriptRole.pm:90):
90:         Class::MOP::load_class($app);

DB<1> *p $app*
Waste::Web

DB<2> *n*
Can't use string ("Waste::Web") as a HASH ref while "strict refs" in use at
/usr/share/perl5/Class/Accessor/Fast.pm line 10.
Compilation failed in require at
/usr/local/share/perl/5.10.1/Catalyst/ScriptRunner.pm line 50.
 at /usr/local/share/perl/5.10.1/Catalyst/ScriptRole.pm line 90.

Catalyst::ScriptRole::_run_application('Catalyst::Script::Server=3DHASH(0xa=
5e1660)')
called at /usr/local/share/perl/5.10.1/Catalyst/Script/Server.pm line 240

Catalyst::Script::Server::run('Catalyst::Script::Server=3DHASH(0xa5e1660)')
called at /usr/local/share/perl/5.10.1/Catalyst/ScriptRunner.pm line 50
        Catalyst::ScriptRunner::run('Catalyst::ScriptRunner', 'Waste::Web',
'Server') called at script/waste_web_server.pl line 8
Debugged program terminated.  Use q to quit or R to restart,
  use o inhibit_exit to avoid stopping after program termination,
  h q, h R or h o to get additional info.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20130330/e267e=
18a/attachment.htm


More information about the Catalyst mailing list