Не удается найти класс приложения в @INC при запуске приложения, созданного Mojolicious - PullRequest
1 голос
/ 12 октября 2019

Я сгенерировал радостное приложение с командой mojo generate app first-app. Он сгенерировал структуру приложения, которая должна позволять запускать пример при запуске сервера dev с 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 (как упомянуто в 6-летнем посте SO),но это дает ту же ошибку, что и выше. Эта команда была такой: /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');

Учитывая, что это приложение было сгенерировано с пристрастием, я бы предположил, что оно не должно получить ошибку @INC и работать без проблем с morboУ кого-нибудь есть понимание этого?

1 Ответ

3 голосов
/ 12 октября 2019

Чтобы ваша установка работала, first-app.pm должен содержать package first-app;, но это не юридический код из-за тире. Хокон Хагланд предполагает, что mojo generate app first-app не должен был работать (предположительно, чтобы избежать этой самой проблемы), поэтому неясно, как вы пришли к описанной вами настройке.

Чтобы устранить эту проблему, вы можете повторно запустить mojo generate appс более подходящим именем (например, FirstApp) и начните сначала.

Кроме того, теоретически вы должны быть в состоянии решить проблему всего за три изменения:

  1. Переименоватьlib/first-app.pm на более обычное имя, такое как lib/FirstApp.pm.
  2. Измените переданный аргумент ->start_app на 'FirstApp'.
  3. Измените директиву package в теперь названном *От 1022 * до package FirstApp;.

Путь к модулю, директива package модуля и инструкция use, используемые для загрузки модуля - в данном случае значение, переданное ->start_app, должны совпадать. Три изменения обеспечивают это для рассматриваемого модуля.

[Примечание: у меня нет опыта работы с Mojo.]

...