我正在尝试让我运行一个旧项目,但我遇到了 TheSchwartz 模型的问题。该代码看起来与我在网上找到的许多其他执行类似操作的示例完全相同。代码也很简单;
package MyApp::Model::TheSchwartz;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Model::Adaptor';
__PACKAGE__->config( class => "TheSchwartz" );
sub mangle_arguments
{
my ($self, $args) = @_;
if($args->{databases})
{
if(ref($args->{databases}) eq 'HASH')
{
my %db = %{ $args->{databases} };
$args->{databases} = [ \%db ];
}
}
return %{ $args }
}
1;
我得到的错误是
Couldn't instantiate component "MyApp::Model::TheSchwartz", "unknown options args, catalyst_component_name, class at /usr/local/share/perl/5.14.2/Catalyst/Model/Adaptor/Base.pm line 27."Compilation failed in require at /usr/local/share/perl/5.14.2/Module/Runtime.pm line 317.
at /usr/local/share/perl/5.14.2/Catalyst/Script/Server.pm line 242.
我尝试删除 mangle_arguments 函数,我尝试删除 Moose 用法并使用“use base”代替。我总是会遇到同样的错误,而且我什至很难理解错误消息。我没有在代码中的任何地方看到catalyst_component_name 定义,因此它必须从Catalyst::Model::Adaptor 传递下来,但是..为什么它不起作用?
编辑:
这是相关的配置部分:
<Model::TheSchwartz>
<args>
verbose 1
<databases>
dsn dbi:mysql:host=db.vpn;dbname=theschwartz
user user
pass password
</databases>
</args>
</Model::TheSchwartz>
最佳答案
这完全是愚蠢的,你尝试的其中一件事只是说你尝试了它,但没有期望它能起作用,但不知何故,这实际上似乎已经解决了它。
delete $args->{class};
delete $args->{catalyst_component_name};
delete $args->{args};
return %{ $args }
该模型似乎仍然可以正常工作,尽管我真的希望通过任意删除像这样出错的键来破坏某些东西。
关于perl - 为什么我在使用 perl 模块 Catalyst::Model::Adaptor 时会出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462152/