启动 Mojolicious 生成的应用程序时,无法在@INC 中找到应用程序 class
Can't find application class in @INC when starting Mojolicious-generated app
我使用命令 mojo generate app first-app
生成了一个有趣的应用程序。当 运行 使用 morbo ./script/first-app
连接开发服务器时,它生成的应用程序结构应该允许 运行ning 示例。
文件结构如下所示:
mojo app structure
我在项目根目录下运行ning 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 post 中所述),但这会产生与上述相同的错误。该命令是这样的:/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 没有问题。有没有人对此有所了解?
要让您的设置生效,first-app.pm
必须包含 package first-app;
,但由于破折号的缘故,这不是合法代码。 Håkon Hægland 建议 mojo generate app first-app
不应该起作用(大概是为了避免这个问题),所以不清楚你是如何得到你描述的设置的。
要解决此问题,您可以使用更合适的名称(例如 FirstApp
)重新运行 mojo generate app
,然后重新开始。
或者,从理论上讲,您应该只需更改三处即可解决问题:
- 将
lib/first-app.pm
重命名为更常规的名称,例如 lib/FirstApp.pm
。
- 将传递给
->start_app
的参数更改为 'FirstApp'
。
- 将现在命名为
lib/FirstApp.pm
的 package
指令更改为 package FirstApp;
。
模块的路径、模块的 package
指令和用于加载模块的 use
语句(在本例中传递给 ->start_app
的值)必须全部匹配。这三个更改确保了相关模块的这一点。
[注意:我没有使用 Mojo 的经验。]
我使用命令 mojo generate app first-app
生成了一个有趣的应用程序。当 运行 使用 morbo ./script/first-app
连接开发服务器时,它生成的应用程序结构应该允许 运行ning 示例。
文件结构如下所示: mojo app structure
我在项目根目录下运行ning 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 post 中所述),但这会产生与上述相同的错误。该命令是这样的:/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 没有问题。有没有人对此有所了解?
要让您的设置生效,first-app.pm
必须包含 package first-app;
,但由于破折号的缘故,这不是合法代码。 Håkon Hægland 建议 mojo generate app first-app
不应该起作用(大概是为了避免这个问题),所以不清楚你是如何得到你描述的设置的。
要解决此问题,您可以使用更合适的名称(例如 FirstApp
)重新运行 mojo generate app
,然后重新开始。
或者,从理论上讲,您应该只需更改三处即可解决问题:
- 将
lib/first-app.pm
重命名为更常规的名称,例如lib/FirstApp.pm
。 - 将传递给
->start_app
的参数更改为'FirstApp'
。 - 将现在命名为
lib/FirstApp.pm
的package
指令更改为package FirstApp;
。
模块的路径、模块的 package
指令和用于加载模块的 use
语句(在本例中传递给 ->start_app
的值)必须全部匹配。这三个更改确保了相关模块的这一点。
[注意:我没有使用 Mojo 的经验。]