perl - 为什么我在使用 perl 模块 Catalyst::Model::Adaptor 时会出现此错误?

标签 perl catalyst

我正在尝试让我运行一个旧项目,但我遇到了 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/

相关文章:

Perl 尾数与其他 double 不同

javascript - 使用perl从html文件中的iframe标签加载数据

perl - Catalyst & Perl - 在运行时生成模型

html - Perl Catalyst - 使用 href 链接到同一站点上的页面时找不到页面

perl - 替换 Ubuntu 16.04 上的默认 perl

c - 在 Perl 中解析多嵌套条件 C 预处理器语句

regex - 正则表达式中的负回顾

perl - 如何在 Catalyst 应用程序中公开多对多标签样式关系?

mysql - DBIx::针对 mysql 日期时间函数的类测试

perl - Catalyst 中的调试屏幕更简洁?