[Catalyst] DBIC connecting to remote MySQL

Dan dan at entropy.homelinux.org
Sun May 23 13:39:12 GMT 2010


Hi Robert. Thanks for the response :) Comments inline.

On Sun, 2010-05-23 at 07:50 -0500, Robert Wohlfarth wrote:

> On Sun, May 23, 2010 at 6:38 AM, Dan <dan at entropy.homelinux.org>
> wrote:
>         __PACKAGE__->config(
>            schema_class => 'EasySaver',
>         
>            connect_info => {
>                dsn => 'dbi:mysql:dbname=EasySaver;host=archeopteryx',
>                user => 'username',
>                password => 'password',
>                AutoCommit => q{1},
>            }
>         );
>         
> [snip...] 
> 
>         Couldn't load class (EasySaver) because: Couldn't instantiate
>         component
>         "EasySaver::Model::ESDB", "Attribute (schema_class) does not
>         pass the
>         type constraint because: Validation failed for
>         'Catalyst::Model::DBIC::Schema::Types::SchemaClass' failed
>         with value
>         EasySaver
>         at /usr/lib/perl5/site_perl/5.10.1/i686-linux-thread-multi/Moose/Meta/Attribute.pm line 746
> 
> You may want to try a different "schema_class". When you generated the
> model, it should also have created a "Schema.pm" file. Put that
> package name (not file name, the package name) in "schema_class". At
> least, this is what worked in my setup.

Interesting. I *didn't* get a Schema.pm file when I generated the model.
I don't know what this file is for, but if it has info on the schema,
then maybe this didn't get generated because the args I supplied to the
create script weren't sufficient for connecting ( as per my original
post ... no docs on accessing remote databases ). I tried regenerating
( without first deleting ) the model:

dan at sabayon:~/src/EasySaver$ script/easysaver_create.pl model ESDB
DBIC::Schema EasySaver dbi:mysql:EasySaver:archeopteryx 'username'
'password' '{ AutoCommit => 1 }'
 exists "/home/dan/src/EasySaver/script/../lib/EasySaver/Model"
 exists "/home/dan/src/EasySaver/script/../t"
 exists "/home/dan/src/EasySaver/script/../lib/EasySaver/Model/ESDB.pm"
created
"/home/dan/src/EasySaver/script/../lib/EasySaver/Model/ESDB.pm.new"
 exists "/home/dan/src/EasySaver/script/../t/model_ESDB.t"
dan at sabayon:~/src/EasySaver$ 

So there's no attempt to create a Schema.pm file on this attempt either.
> 
> I say that because of the error message. The first paragraph of output
> contains the actual error message. The rest of that is a stack trace
> that you don't need for this issue.
> 
> Catalyst uses something called "Moose". Moose adds shortcuts for
> quickly building object oriented packages. It's very cool stuff. Moose
> offers limited type checking. Moose reported a mis-match in the type
> it expected versus the type it received.
> 
> "schema_class" eventually becomes an object attribute. Moose thinks
> that "schema_class" should be set to an instance of type
> "Catalyst::Model::DBIC::Schema::Types::SchemaClass". The "EasySchema"
> from the configuration file is not from the Catalyst::Model::DBIC
> hierarchy. 
> 
> -- 
> Robert Wohlfarth

Thanks for the explanation.

Dan




More information about the Catalyst mailing list