当我尝试使用Fixtures转储数据库时:
dbic-migration --schema_class App::Schema --database PostgreSQL -Ilib dump_all_sets
我收到了错误:
DBIx::Class::Schema::source(): Can't find source for Schet at /home/xxx/lib/perl5/x86_64-linux/Moose/Meta/Method/Delegation.pm line 110
在主要应用程序中,我没有问题:
$schema->resultset('Schet')
如何解决此错误并将数据转储到灯具中?
答案 0 :(得分:1)
在我们连接到临时架构的DBIx::Class::Schema::Loader中。
发生连接时,架构为cloned
但是因为那里只有schema name is passed没有cloned,因此有空类映射。这是错的。
如果仔细观察,您会看到克隆发生两次:here和here。这种额外的克隆是浪费的,应该重构。
因为应该将here的工作重新传递到所需的命名空间克隆模式:
sub _make_schema_at {
my ($self, $name, %extra_opts) = @_;
my $schema = $self->schema->clone;
bless $schema, $name;
DBIx::Class::Schema::Loader::make_schema_at
$schema, {_merge_opts(%extra_opts)}, [{_rearrange_connect_info($schema->storage)}];
}
<强> UPD 强>
Lately,当创建新的加载器时,naming
被强制为current
而不是传递参数,而参数又是从应用程序模式克隆的。 (我不检查,但是当应用程序有自己的naming
时,这会在转储数据时导致问题)和loader is invoked again。这里的loader加载类based on table names而不是包名(如何在__PACKAGE__->load_namespaces( ... )
完成)
最后@to_register
列表不同:
[
Ip,
App::Schema0::Result::Ip,
]
[
Scheta,
App::Schema0::Result::Scheta,
]
Here:
[
IP,
App::Schema::Result::IP,
],
[
Schet,
App::Schema::Result::Schet,
],
答案 1 :(得分:0)
最近在docker容器中闯入了这个。奇怪的是,某些DBIx目录具有错误的权限。它们至少必须是可读的。还要检查文件/目录的所有权。