Иногда происходит сбой подключения к БД

Я запускаю продуктивное приложение для управления публикациями нашей исследовательской группы. Приложение написано в mojolicious Framework на Perl. Я использую 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

3 ответа

Решение

Эта ошибка появлялась дважды в месяц. Это было настолько раздражающим, что я переписал приложение, чтобы использовать MySQL и соответствующий коннектор DBI MySQL. С тех пор больше не вылетает.

$dbh->prepare возвращает неопределенное значение. Это может иметь несколько причин. Попробуйте что-то похожее на это:

$sth = $dbh->prepare($qry) or die $dbh->errstr;

Я знаю, что это было какое-то время, и, возможно, вы уже поняли, но я подумал, что попробую.

Если вы запускаете его с помощью hypnotoad, возникает известная проблема, если вы создаете обработчики перед предварительным блокированием: проблема с подключением к базе данных в предварительном блокировании

Надеюсь, поможет

Другие вопросы по тегам