[Catalyst] Re: 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:53:04 GMT 2013


Looks like it bombs out at $c->session_store_model because "$c" is just
"Waste::Web" and strict refs is in use. But why wouldn't it bomb out for
Catalyst::Upgrade or Spill?


Catalyst::Plugin::Session::Store::DBIC::setup_finished(/usr/share/perl5/Cat=
alyst/Plugin/Session/Store/DBIC.pm:76):
DB<23> *v 70*
69      sub setup_finished {
70:         my $c =3D shift;
71
72:         return $c->next::method unless @_;
73
74          # Try to determine id_field if it isn't set
75:         unless ($c->_session_plugin_config->{id_field}) {
76=3D=3D>           my $model =3D $c->session_store_model;

DB<24> *p $c->session_store_model*
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.


On Sat, Mar 30, 2013 at 11:04 AM, will trillich <will.trillich at serensoft.com
> wrote:

> 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 look=
ed
> 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/Scrip=
t/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/Catal=
yst/ScriptRole.pm:88):
> 88:         my $self =3D shift;
>
> DB<1> *n*
>
> Catalyst::ScriptRole::_run_application(/usr/local/share/perl/5.10.1/Catal=
yst/ScriptRole.pm:89):
> 89:         my $app =3D $self->application_name;
>
> DB<1> *n*
>
> Catalyst::ScriptRole::_run_application(/usr/local/share/perl/5.10.1/Catal=
yst/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(0=
xa5e1660)')
> 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.
>
>
>


-- =

 Will Trillich :: 812.454.6431

=93Grading takes away all the fun from failing. And a huge part of education
is about failure.=94  -- Shimon Schocken
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20130330/e1f3f=
837/attachment.htm


More information about the Catalyst mailing list