Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 我怎么能';刷新';a';助手';在Mojolicous中的作用?_Perl_Mojolicious - Fatal编程技术网

Perl 我怎么能';刷新';a';助手';在Mojolicous中的作用?

Perl 我怎么能';刷新';a';助手';在Mojolicous中的作用?,perl,mojolicious,Perl,Mojolicious,有时我需要刷新“helper”函数 例如: 如果数据库连接函数在helper函数中,并且数据库访问已更改,并且我将此访问数据存储在sqlite数据库中,并覆盖此数据(在sqlite数据库中),在这种情况下,如何刷新helper函数?我认为每次连接或重用主数据库的句柄时,都需要查询sqlite数据库中的更改。如果您注意到sqlite中发生了更改,则需要断开与主机的连接,获取新凭据并使用新凭据重新连接到主机 $app->helper( db => sub { my $

有时我需要刷新“helper”函数

例如:
如果数据库连接函数在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的连接超级稳定,并且在几天内不会中断:)我将更正答案,并将其作为助手实现。