2010年06月18日
Couldn't load class (MyApp) because: Couldn't instantiate component "MyApp::Model::CDBI"
はまった。。。。。
Couldn't load class (MyApp) because: Couldn't instantiate component "MyApp::Model::CDBI", "test has no primary key at /usr/lib/perl5/site_perl/5.8.8/Class/DBI/Loader/Generic.pm line 166"Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 114, line 855.
at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 120
Class::MOP::__ANON__('Couldn\'t instantiate component "FormTest::Model::CDBI", "tes...') called at /usr/lib/perl5/site_perl/5.8.8/Try/Tiny.pm line 98
Try::Tiny::try('CODE(0x9d1e4cc)', 'Try::Tiny::Catch=REF(0xa4c5d18)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 125
Class::MOP::load_first_existing_class('FormTest') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 137
Class::MOP::load_class('FormTest') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/ScriptRole.pm line 61
Catalyst::ScriptRole::_run_application('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/Script/Server.pm line 181
Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Method/Wrapped.pm line 48
Class::MOP::Method::Wrapped::__ANON__('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Method/Wrapped.pm line 89
Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/ScriptRunner.pm line 20
Catalyst::ScriptRunner::run('Catalyst::ScriptRunner', 'FormTest', 'Server') called at script/formtest_server.pl line 8
■解決方法
テスト用だったので、test DBを使っていて、その中にtest テーブルがあるという感じだった。
で、test テーブルにprimary key が設定されていないためにエラーを吐いていた。
こんな感じ
mysql> use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| aaa | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> alter table test add primary key (aaa);
で解決。
Couldn't load class (MyApp) because: Couldn't instantiate component "MyApp::Model::CDBI", "test has no primary key at /usr/lib/perl5/site_perl/5.8.8/Class/DBI/Loader/Generic.pm line 166"Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 114, line 855.
at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 120
Class::MOP::__ANON__('Couldn\'t instantiate component "FormTest::Model::CDBI", "tes...') called at /usr/lib/perl5/site_perl/5.8.8/Try/Tiny.pm line 98
Try::Tiny::try('CODE(0x9d1e4cc)', 'Try::Tiny::Catch=REF(0xa4c5d18)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 125
Class::MOP::load_first_existing_class('FormTest') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP.pm line 137
Class::MOP::load_class('FormTest') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/ScriptRole.pm line 61
Catalyst::ScriptRole::_run_application('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/Script/Server.pm line 181
Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Method/Wrapped.pm line 48
Class::MOP::Method::Wrapped::__ANON__('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Method/Wrapped.pm line 89
Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0xa4ea718)') called at /usr/lib/perl5/site_perl/5.8.8/Catalyst/ScriptRunner.pm line 20
Catalyst::ScriptRunner::run('Catalyst::ScriptRunner', 'FormTest', 'Server') called at script/formtest_server.pl line 8
■解決方法
テスト用だったので、test DBを使っていて、その中にtest テーブルがあるという感じだった。
で、test テーブルにprimary key が設定されていないためにエラーを吐いていた。
こんな感じ
mysql> use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| aaa | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> alter table test add primary key (aaa);
で解決。
