Все примеры кода, которые я видел, связанные с Dancer2 и соединениями с базой данных, помещают весь код Dancer2 непосредственно в анонимные подпрограммы, связанные с различными запросами «get» и «put».Как я могу использовать Dancer2 :: Plugin :: Database, когда мой код разбит на несколько файлов?
Я хотел бы организовать свой код таким образом, чтобы файл myServices.pm был по существу просто маршрутизатором для других файлов кода, содержащих мясо исполняемого файла. Я могу успешно использовать ключевое слово params в модуле MyServices :: Submission. Однако я не могу использовать ключевое слово базы данных из Dancer2 :: Plugin :: Database в этом контексте.
myServices.pm:
package myServices;
use Dancer2;
use Dancer2::Plugin::REST;
use Dancer2::Plugin::Database;
use Data::Dumper;
use MyServices::Submission;
get '/direct' => sub {
my $dbh = database;
return 'success';
};
get '/indirect' => sub {
MyServices::Submission::databaseTest();
};
true;
MyServices/Submission.pm:
package MyServices::Submission;
use Dancer2;
use Dancer2::Plugin::REST;
use Dancer2::Plugin::Database;
use Data::Dumper;
sub databaseTest{
my $dbh = database;
return 'success';
}
true;
Вызов/DIRECT возвращает 'успех'.
Вызов/косвенные возвращения Ошибка 500 - Внутренняя ошибка сервера с сообщением «Не удается получить подключение к базе данных без настроек!». Затем он распечатывает мои настройки, включая правильную конфигурацию базы данных.
Мой файл конфигурации должен быть в порядке, потому что вызов/direct имеет успех.
Q-х:
- Может кто-нибудь повторить это поведение? (Убедитесь, что мне не хватает что-то очевидное.)
- Есть ли способ успешно использовать Dancer2 :: Plugin :: Database в модуле MyServices :: Submission или Нужно ли искать другое решение для подключения db для того, чтобы удовлетворить потребности моего кода?
Первое, что я заметил, это то, что ваши модули не возвращают истинное значение. Поместите '1;' как самую последнюю строку в каждом. – stevieb
Соответствующие записи журнала ошибок веб-сервера, вероятно, будут иметь ценный вклад в проблему ... – stevieb
Когда вы вызываете 'use Dancer2;' в своем модуле Submission, вы фактически создаете отдельное приложение Dancer2. См. [Что находится в appname?] (Http://advent.perldancer.org/2014/10) – ThisSuitIsBlackNot