2012-05-20 2 views
2

Catalyst::Plugin::AutoCRUD을 사용 중이며 링크 된 CPAN 페이지에 제공된 지시 사항을 사용하여 DBIx 스키마를 생성 중입니다. 특히, 거기에 나열된 명령을 복사/붙여 넣기하고 내 데이터베이스와 관련된 세부 정보 만 변경했습니다 ('pg'=> 'mysql', 다른 사용자 이름/pw 등).Catalyst가 DBIx 생성 스키마를 승인하지 않음

이제 DBIC :: Database :: foo :: Schema 스키마가 있습니다. 스키마는 내 DB의 각 테이블에 대한 * .pm을 포함하는 파일이며 자체 Schema.pm입니다.

내 설정 파일에 다음 항목이 포함되어

<Model::AutoCRUD::DBIC> 
    schema_class Database::foo::Schema 
    connect_info dbi:mysql:dbname=foo 
    connect_info user 
    connect_info pass 
    <connect_info> 
     AutoCommit  1 
    </connect_info> 
</Model::AutoCRUD::DBIC> 

나는 AutoCRUD 서버를 시작으로 이동, 나는 다음과 같은 오류 메시지가 얻을 : 나는 촉매이 새로운 오전으로

Couldn't instantiate component "DemoApp::Model::AutoCRUD::DBIC", "Attribute (schema_class) 
does not pass the type constraint because: Validation failed for 
'Catalyst::Model::DBIC::Schema::Types::SchemaClass' with value Database::foo::Schema at 
/Library/Perl/5.12/darwin-thread-multi-2level/Moose/Meta/Attribute.pm line 1275. 

을 플러그인,이 문제를 해결하는 방법을 모르겠습니다. Google은 매우 도움이되지 못했습니다. this 토론을 찾았지만, 문제를 말할 수있는 것으로부터 촉매가 잘못된 * .pm으로 지적되고 있다는 것입니다. (내가 잘못 읽었을 지 모르지만). 경우

이 도움이된다, 여기 Schema.pm의 내용은 다음과 같습니다

use utf8; 
package DBIC::Database::foo::Schema; 

# Created by DBIx::Class::Schema::Loader 
# DO NOT MODIFY THE FIRST PART OF THIS FILE 

use strict; 
use warnings; 

use base 'DBIx::Class::Schema'; 

__PACKAGE__->load_namespaces; 


# Created by DBIx::Class::Schema::Loader v0.07024 @ 2012-05-20 07:25:21 
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cevz/k4rUWIcEhMl29r0QA 


# You can replace this text with custom code or comments, and it will be preserved on regeneration 
1; 

이 도와주세요!

답변

0

Catalyst manual에서 DBIC 클래스를 완전히 다시 빌드하면 문제가 해결됩니다. 첫 번째 클래스 집합에서 Moose가 허용 할 수없는 것을 정확히 찾아 낼 수는 없지만 두 번째 클래스 집합에는 하나의 추가 문제가있었습니다. 각 클래스 (예 : 각 * .pm)에 __PACKAGE__->meta->make_immutable; 줄이 생성되었습니다. 그것을 주석 처리하고 Catalyst를 다시 시작하면 CRUD 응용 프로그램이 작동합니다.

1

스키마 이름은 DBIC::Database::Foo::Schema이지만 구성 파일에는 Database::foo::Schema이 있습니다. 이름은 대소 문자를 구분하므로 스키마 경로와 파일의 이름을 변경하거나 구성을 수정하십시오.

+0

감사합니다. 그것은이 기사를 쓰는 오타였습니다. – learner