我有一个 DBIC 模式,其中所有类都使用一个公共基类和定义类。基类加载公共组件,并覆盖更新方法以便在审计表中记录变更集。定义类是从数据库生成的静态类。一个典型的类头看起来像:
package Schema::Base;
use base 'DBIx::Class::Core';
sub update {
my $self = shift;
# track changes to row
my $instance = $self->next::method(@_);
# save changeset to audit table
return $instance;
}
package Schema::Immutable::User;
use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'DBIx::Class:Core';
__PACKAGE__->load_components("InflateColumn::DateTime");
package Schema::Mutable::User
use base ('Schema::Base', 'Schema::Immutable::User');
sub update {
my $self = shift;
# encrypt password
return $self->next::method(@_);
}
在我添加并覆盖 User 类中的更新之前,一切正常。显然在基类中有覆盖,并且 User 类在某种程度上发生了冲突。我正在使用 next::method(@_) 调用下一个更新方法,但它总是挂起。
这是一个 CGI 应用程序。因此,当我点击“保存”时,浏览器会转动它的轮子,直到我点击转义来取消请求。此时,我的日志记录恢复了,它显示所有查询都在正确且快速地执行,但它在 User 类的末尾挂起,直到我在浏览器中点击转义后才会继续。
更新:这似乎是与催化剂相互作用的问题。自行运行时,此代码可以正常工作。但是,当从催化剂应用程序中执行时,它会失败。