0

我运行一个高效的应用程序来管理我们研究小组的出版物。该应用程序是用 perl 的 mojolicious 框架编写的。我使用 sqlite3 作为数据库,使用 Hypnotoad 作为应用服务器。

我的问题是与数据库的连接偶尔会崩溃(每周 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

4

3 回答 3

1

$dbh->prepare 返回一个未定义的值。这可能有几个原因。尝试类似的事情:

$sth = $dbh->prepare($qry) or die $dbh->errstr;
于 2015-01-16T10:44:14.617 回答
1

我知道这已经有一段时间了,也许你已经想通了,但我想我会试一试。

如果您使用 hypnotoad 运行它,如果您在预分叉之前创建处理程序,则会出现一个已知问题:预分叉中的数据库连接问题

希望能帮助到你

于 2015-03-18T10:29:05.757 回答
0

这个错误每个月都会出现两次。太烦人了,我重写了应用程序以使用 MySQL 和适当的 DBI MySQL 连接器。从那时起,没有更多的崩溃。

于 2015-06-12T13:30:33.843 回答