我运行了一个高效的应用程序来管理我们研究小组的出版物。该应用程序是用perl中的mojolicious框架编写的。我使用sqlite3作为数据库,使用Hypnotoad作为应用服务器。
我的问题是,与DB的连接偶尔会崩溃(每周2次),而不会给出合理的错误消息。唯一有帮助的是重启Hypnotoad。有什么想法可能会发生吗?
错误消息示例:
[Fri Jan 16 08:43:09 2015] [error] Can't call method "execute" on an undefined value at /home/piotr/perl/publiste2/script/../lib/AdminApi/Core.pm line 525.
那里的代码如下:
my $qry = "SELECT DISTINCT our_type FROM OurType_to_Type WHERE landing=1 ORDER BY our_type ASC";
my $sth = $dbh->prepare( $qry );
$sth->execute(); # this is the line 525
辅助函数返回dbh变量:
DBI->connect('dbi:SQLite:dbname='.$config->{normal_db}, '', '') or die $DBI::errstr .". File is: ".$config->{normal_db};
此处提供完整代码:https://bitbucket.org/vikin9/hex64publicationlistmanager/src
答案 0 :(得分:1)
$ dbh-> prepare返回一个未定义的值。这可能有几个原因。尝试类似的东西:
$sth = $dbh->prepare($qry) or die $dbh->errstr;
答案 1 :(得分:0)
我知道已经有一段时间了,也许你已经想通了,但我想我会试一试。
如果你使用hypnotoad运行它,如果你在preforking之前创建处理程序就会出现一个已知的问题:Database connection problem in preforking
希望有所帮助
答案 2 :(得分:0)
此错误每月出现两次。我已经重写了应用程序以使用MySQL和正确的DBI MySQL连接器,这太烦人了。从那时起,不再崩溃。