Не удается найти класс приложения в @INC при запуске приложения, созданного Mojolicious
Я создал мохолическое приложение с помощью команды mojo generate app first-app
. Он сгенерировал структуру приложения, которая должна позволять запускать пример при запуске сервера разработки сmorbo ./script/first-app
.
Файловая структура выглядит так:структура приложения mojo
Моя ошибка при запуске morbo ./script/first-app
в корне каталога проекта есть такая ошибка:
Can't load application from file "/home/djnorrisdev/Documents/mojo-practice/first-app/script/first-app":
Can't find application class "first-app" in @INC. (
/home/djnorrisdev/Documents/mojo-practice/first-app/lib
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0/x86_64-linux
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0/x86_64-linux
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0)
Compilation failed in require at (eval 72) line 1
(Для удобства чтения добавлены разрывы строк. Строка с отступом является продолжением предыдущей.)
Я попытался использовать полный путь для morbo (как упоминалось в сообщении SO 6-летней давности), но это дает ту же ошибку, что и выше. Эта команда была такой:/home/djnorrisdev/perl5/perlbrew/pls/perl-5.30.0/bin/morbo ./script/first-app
Я предполагаю, что любой, кто знаком с полным mojolicious приложением, будет знаком с файлом сценария, но вот содержимое script/first-app
:
#!/usr/bin/env perl
use strict;
use warnings;
use Mojo::File 'curfile';
use lib curfile->dirname->sibling('lib')->to_string;
use Mojolicious::Commands;
# Start command line interface for application
Mojolicious::Commands->start_app('first-app');
Учитывая, что это приложение, созданное с помощью mojolicious, я предполагаю, что оно не должно получать ошибку @INC и запускаться с morbo без проблем. Кто-нибудь знает об этом?
1 ответ
Чтобы ваша установка работала, first-app.pm
должен содержать package first-app;
, но это недопустимый код из-за тире. Хокон Хэгланд предполагает, чтоmojo generate app first-app
не должно было работать (предположительно, чтобы избежать этой самой проблемы), поэтому неясно, как вы пришли к описанной вами настройке.
Чтобы устранить проблему, вы можете перезапустить mojo generate app
с более подходящим именем (например, FirstApp
) и начать заново.
В качестве альтернативы теоретически вы сможете решить проблему всего за три изменения:
- Переименовать
lib/first-app.pm
к более традиционному имени, напримерlib/FirstApp.pm
. - Измените аргумент, переданный в
->start_app
к'FirstApp'
. - Изменить
package
директива в теперь названномlib/FirstApp.pm
кpackage FirstApp;
.
Путь модуля, путь модуля package
директива, а use
оператор, используемый для загрузки модуля - значение, переданное в ->start_app
в этом случае - все должно совпадать. Три изменения обеспечивают это для рассматриваемого модуля.
[Примечание: у меня нет опыта работы с Mojo.]