1

我使用命令生成了一个 mojolicious 应用程序mojo generate app first-app。它生成了应用程序结构,当使用morbo ./script/first-app.

文件结构如下: mojo app structure

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');

考虑到这是一个由 mojolicious 生成的应用程序,我认为它不应该出现 @INC 错误并且可以毫无问题地使用 morbo 运行。有没有人对此有见识?

4

1 回答 1

3

为了使您的设置正常工作,first-app.pm必须包含package first-app;,但由于破折号,这不是合法代码。Håkon Hægland 认为这mojo generate app first-app不应该起作用(大概是为了避免这个问题),所以不清楚你是如何得到你描述的设置的。

要解决此问题,您可以mojo generate app使用更合适的名称(例如FirstApp)重新运行并重新开始。

或者,理论上您应该只需进行三个更改即可解决问题:

  1. 重命名lib/first-app.pm为更常规的名称,例如lib/FirstApp.pm.
  2. 将传递给的参数更改->start_app'FirstApp'
  3. package将now-named 中的指令更改lib/FirstApp.pmpackage FirstApp;.

模块的路径、模块的package指令和use用于加载模块的语句(->start_app在这种情况下传递给的值)必须全部匹配。这三个更改确保了相关模块的这一点。

[注意:我没有使用 Mojo 的经验。]

于 2019-10-12T20:05:37.797 回答