2

私はCatalyst::Plugin::AutoCRUDを使用しており、リンクされた CPAN ページで提供されている手順を使用して DBIx スキーマを生成しています。具体的には、そこにリストされているコマンドをコピーして貼り付け、データベースに関連する詳細のみを変更しました ('pg' => 'mysql'、別のユーザー名/pw など)。

これでスキーマ 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.

Catalyst とこのプラグインは初めてなので、この問題を解決する方法がわかりません。Google はあまり役に立ちませんでした - 私はこの議論を見つけましたが、私が言えることは、Catalyst が間違った *.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;

助けてください!

4

2 に答える 2

2

スキーマには名前DBIC::Database::Foo::Schemaが付けられていますが、設定ファイルにはDatabase::foo::Schema. 名前は大文字と小文字が区別されるため、スキーマ パスとファイルの名前を変更するか、構成を修正してください。

于 2012-05-20T15:23:02.390 に答える
0

CatalystのマニュアルからDBICクラスを完全に再構築すると、問題が解決しました。最初のクラスのセットでMooseに受け入れられなかったものを特定することはできませんが、2番目のクラスのセットにはもう1つの問題がありました__PACKAGE__->meta->make_immutable;。つまり、すべてのクラス(つまり、各* .pm)に対して行が生成されました。コメントアウトしてCatalystを再起動すると、CRUDアプリが機能するようになりました。

于 2012-05-21T11:54:25.427 に答える