Perl 我怎么能';刷新';a';助手';在Mojolicous中的作用?
有时我需要刷新“helper”函数 例如:Perl 我怎么能';刷新';a';助手';在Mojolicous中的作用?,perl,mojolicious,Perl,Mojolicious,有时我需要刷新“helper”函数 例如: 如果数据库连接函数在helper函数中,并且数据库访问已更改,并且我将此访问数据存储在sqlite数据库中,并覆盖此数据(在sqlite数据库中),在这种情况下,如何刷新helper函数?我认为每次连接或重用主数据库的句柄时,都需要查询sqlite数据库中的更改。如果您注意到sqlite中发生了更改,则需要断开与主机的连接,获取新凭据并使用新凭据重新连接到主机 $app->helper( db => sub { my $
如果数据库连接函数在helper函数中,并且数据库访问已更改,并且我将此访问数据存储在sqlite数据库中,并覆盖此数据(在sqlite数据库中),在这种情况下,如何刷新helper函数?我认为每次连接或重用主数据库的句柄时,都需要查询sqlite数据库中的更改。如果您注意到sqlite中发生了更改,则需要断开与主机的连接,获取新凭据并使用新凭据重新连接到主机
$app->helper(
db => sub {
my $self = shift;
my $credentials_changed = your_function_to_check_this(...);
if($credentials_changed){
$dbh->disconnect if $dbh;
return db_connect(
$credentials->{db_host}, $credentials->{db_user},
$credentials->{db_database}, $credentials->{db_pass}
);
}
);
sub db_connect {
my ($db_host, $db_user, $db_database, $db_pass) = @_;
my $dbh = 0;
$dbh = DBI->connect("DBI:mysql:database=$db_database;host=$db_host", "$db_user", "$db_pass", {'RaiseError' => 1});
$dbh->{mysql_auto_reconnect} = 1;
return $dbh;
}
解释什么是数据库访问,以及除了sqlite之外您是否使用另一个db。此解决方案的问题是
具有
是一个属性,因此代码块仅在第一次运行。如果这是一个助手,而不是一个属性,那么它将按照您所描述的那样工作。哇,这意味着我与DB的连接超级稳定,并且在几天内不会中断:)我将更正答案,并将其作为助手实现。