【问题标题】:Why do I get many Moose warnings when I start Catalyst?为什么我在启动 Catalyst 时会收到许多 Moose 警告?
【发布时间】:2011-04-21 12:17:04
【问题描述】:

我显然遇到了 Moose/Class::MOP 的问题(与催化剂相关)。启动我的服务器,我得到以下输出...(如下所示)

角色应用程序的别名和排除选项已在 /usr/local/lib/perl/5.10.1/Moose/Meta/Role/Application.pm 第 26 行重命名为 -alias 和 -excludes Moose::Meta::Role::Application::new('Moose::Meta::Role::Application::ToRole', 'excludes', 'ARRAY(0x9645568)') 在 /usr/local/lib/ 调用perl/5.10.1/Moose/Meta/Role.pm 第 416 行 Moose::Meta::Role::apply('Moose::Meta::Role=HASH(0x95b3368)', 'Moose::Meta::Role=HASH(0x9446d90)', '排除', 'ARRAY(0x9645568) ') 在 /usr/local/lib/perl/5.10.1/Moose/Util.pm 第 133 行调用 Moose::Util::_apply_all_roles('Moose::Meta::Role=HASH(0x9446d90)', undef, 'MooseX::Getopt', 'HASH(0x9454a08)') 在 /usr/local/lib/perl/ 调用5.10.1/Moose/Util.pm 第 87 行 Moose::Util::apply_all_roles('Moose::Meta::Role=HASH(0x9446d90)', 'MooseX::Getopt', 'HASH(0x9454a08)') 在 /usr/local/lib/perl/5.10 调用。 1/Moose/Role.pm 第 26 行 Moose::Role::with('Moose::Meta::Role=HASH(0x9446d90)', 'MooseX::Getopt', 'HASH(0x9454a08)') 在 /usr/local/lib/perl/5.10 调用。 1/Moose/Exporter.pm 第 294 行 Moose::Role::with('MooseX::Getopt', 'HASH(0x9454a08)') 在 /usr/share/perl5/Catalyst/ScriptRole.pm 第 8 行调用 需要在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 113 行调用的 Catalyst/ScriptRole.pm Class::MOP::__ANON__() 在 /usr/share/perl5/Try/Tiny.pm 第 71 行调用 eval {...} 在 /usr/share/perl5/Try/Tiny.pm 第 67 行调用 Try::Tiny::try('CODE(0x93c2910)', 'Try::Tiny::Catch=REF(0x93bba38)') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 调用第 124 行 Class::MOP::load_first_existing_class('Catalyst::ScriptRole') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 136 行调用 Class::MOP::load_class('Catalyst::ScriptRole', undef) 在 /usr/local/lib/perl/5.10.1/Moose/Util.pm 第 109 行调用 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x8fc9378)', undef, 'Catalyst::ScriptRole') 在 /usr/local/lib/perl/5.10.1/Moose/Util 调用.pm 第 87 行 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x8fc9378)', 'Catalyst::ScriptRole') 在 /usr/local/lib/perl/5.10.1/Moose.pm 第 58 行调用 Moose::with('Moose::Meta::Class=HASH(0x8fc9378)', 'Catalyst::ScriptRole') 在 /usr/local/lib/perl/5.10.1/Moose/Exporter.pm 第 294 行调用 Moose::with('Catalyst::ScriptRole') 在 /usr/share/perl5/Catalyst/Script/Server.pm 第 14 行调用 需要在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 113 行调用的 Catalyst/Script/Server.pm Class::MOP::__ANON__() 在 /usr/share/perl5/Try/Tiny.pm 第 71 行调用 eval {...} 在 /usr/share/perl5/Try/Tiny.pm 第 67 行调用 Try::Tiny::try('CODE(0x8f6dc38)', 'Try::Tiny::Catch=REF(0x8f8d1c8)') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 调用第 124 行 Class::MOP::load_first_existing_class('Catalyst::Script::Server') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 136 行调用 Class::MOP::load_class('Catalyst::Script::Server') 在 /usr/share/perl5/Catalyst/ScriptRunner.pm 第 18 行调用 Catalyst::ScriptRunner::run('Catalyst::ScriptRunner', 'Jamaica', 'Server') 在 script/boca_server.pl 第 8 行调用 旧的 Moose::Util::MetaRole API(0.94 版之前)已在 /usr/local/lib/perl/5.10.1/Moose/Util/MetaRole.pm 第 16 行弃用 Moose::Util::MetaRole::apply_metaclass_roles('for_class', 'Catalyst::Controller', 'metaclass_roles', 'ARRAY(0x97bdff8)', 'method_metaclass_roles', 'ARRAY(0x97ab9f0)', 'wrapped_method_metaclass_roles', 'ARRAY (0x981d650)') 在 /usr/share/perl5/MooseX/MethodAttributes.pm 第 32 行调用 MooseX::MethodAttributes::init_meta('MooseX::MethodAttributes', 'for_class', 'Catalyst::Controller', 'metaclass', undef) 在 /usr/local/lib/perl/5.10.1/Moose/Exporter 调用.pm 第 355 行 Moose::Exporter::__ANON__('MooseX::MethodAttributes') 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 Catalyst::Controller::BEGIN() 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 eval {...} 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 需要在 /usr/share/perl5/Catalyst.pm 第 16 行调用的 Catalyst/Controller.pm Catalyst::BEGIN() 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 eval {...} 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 需要在 /home/bobek/dev/build_7.2/mvc/Jamaica/script/../lib/Jamaica.pm 第 17 行调用 Catalyst.pm Jamaica::BEGIN() 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 eval {...} 在 /usr/share/perl5/Catalyst/Controller.pm 第 10 行调用 需要 Jamaica.pm 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 113 行调用 Class::MOP::__ANON__() 在 /usr/share/perl5/Try/Tiny.pm 第 71 行调用 eval {...} 在 /usr/share/perl5/Try/Tiny.pm 第 67 行调用 Try::Tiny::try('CODE(0x8fb3230)', 'Try::Tiny::Catch=REF(0x969fee0)') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 调用第 124 行 Class::MOP::load_first_existing_class('Jamaica') 在 /usr/local/lib/perl/5.10.1/Class/MOP.pm 第 136 行调用 Class::MOP::load_class('Jamaica') 在 /usr/share/perl5/Catalyst/ScriptRole.pm 第 61 行调用 Catalyst::ScriptRole::_run_application('Catalyst::Script::Server=HASH(0x969d748)') 在 /usr/share/perl5/Catalyst/Script/Server.pm 第 181 行调用 Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0x969d748)') 在 /usr/local/lib/perl/5.10.1/Class/MOP/Method/Wrapped.pm 调用第 48 行 Class::MOP::Method::Wrapped::__ANON__('Catalyst::Script::Server=HASH(0x969d748)') 在 /usr/local/lib/perl/5.10.1/Class/MOP/Method/ 调用Wrapped.pm 第 89 行 Catalyst::Script::Server::run('Catalyst::Script::Server=HASH(0x969d748)') 在 /usr/share/perl5/Catalyst/ScriptRunner.pm 第 20 行调用 Catalyst::ScriptRunner::run('Catalyst::ScriptRunner', 'Jamaica', 'Server') 在 script/boca_server.pl 第 8 行调用

我是 Catalyst 的新手(我很喜欢它,我只是想成功启动并运行它)。我检查了 Moose 和 Class::MOP 的最新版本,它们是最新的(就 CPAN 而言)。

希望熟悉 Moose 的人以前见过这个。任何建议或开始检查的地方将不胜感激。

米歇尔 B.

【问题讨论】:

  • 可以发一下boca_server.pl的相关部分吗?
  • 谢谢埃里克。第八行 .... Catalyst::ScriptRunner->run('Boca', 'Server'); Catalyst 创建自动创建这个。 :-)
  • 您如何安装 Moose 和 Catalyst?安装时应该有关于版本不兼容的警告。
  • 感谢以太!我只是通过 CPAN 做了一个简单的安装。不过没有警告。
  • 对于这个特定问题,我们未能在一个 Moose 版本的 Makefile.PL 中提供正确的警告。很有可能没有。

标签: perl moose catalyst


【解决方案1】:

您正在运行旧版本的 Catalyst。此问题已在提交 r13516 中得到修复,并且从版本 5.80026 开始已在 CPAN 上可用(5.80028 是最新的并推荐使用)。

Catalyst 正在使用 Moose 的一些已弃用功能,该功能最近才开始发出警告。

【讨论】:

  • 谢谢拉夫!我只需要升级 Catalyst。我知道这很明显,我谢谢你。 (以及 Eric 和 Ether)
  • 你能看一下我的新回复吗?当前的东西中存在一些版本依赖性问题,其中大部分似乎在发行版中有你的名字。谢谢!
【解决方案2】:

所以,你是对的,当前的 Cat 东西有一个相当破碎的依赖链。您可以从当前 CPAN 上的通过/失败中看到 5.80030 的失败率远高于正常情况。

根据您当前模块/版本的状态,有几个颠簸。今天早上这对我有用(我不确定这是否矫枉过正)-

cpanm -v namespace::clean
cpanm -v namespace::autoclean
cpanm -v B::Hooks::EndOfScope
cpanm -v Package::Stash
cpanm -v Class::MOP Moose MooseX::Types
cpanm -v MooseX::Role::WithOverloading::Meta::Role::Application

cpanm -v Catalyst Catalyst::Devel

如果您使用 Config::General 进行配置,这也是一个好主意:

cpanm -v Config::General

如果您将它们放入但无法启动,只需阅读堆栈跟踪(向后)以查找名称或缺少的函数/方法。任何你认为有问题的东西,升级。这是一个“稳定”的套件,但它是移动目标的集合,所有东西都必须排队。

【讨论】:

  • 您提到的某些模块存在问题,而其他模块则没有。这些是由 Package::Stash 中的更改引起的。当您升级 Package::Stash 时,它的 Makefile.PL 会警告您并告诉您需要升级哪个模块。它还安装了一个package-stash-conflicts 程序供您检查您仍需要升级哪些模块,以防您错过了 Makefile.PL 通知。
  • @rafl,感谢您提供的信息(以及辛勤工作,我非常感谢!)。我不认为让普通用户跳过这种箍是解决这个问题的正确方法。我可以做到,但大多数人不会/不能。目前 5.80030 上 Cat 测试的 FAIL 率 > 12%,而 5.80029 则
  • 如果您有替代解决方案来解决 CPAN 工具链中缺乏冲突支持的问题,请告诉我们。
  • @rafl:呵呵。我知道它可能是一个tarpit。我实际上没有安装“package-stash-conflicts”;不知道为什么,可能是我。
  • @rafl:在这种情况下,看起来楔子是 MooseX::Role::WithOverloading 的 Makefile.PL 依赖项中缺少 namespace::clean/namespace::autoclean 的版本声明。它们现在都为零(在 0.09 中)。我不确定哪个版本可以修复损坏。我的落后 IIRC 3 100 分。也许这些实际上会在 Moose 空间中得到更好的解决(?)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多