我是Mojolicious的新手,我有各种各样的工作,但我遇到了一个问题,我在下面的一小段代码中重新创建了这个问题。
问题很简单:我无法加载外部CSS和JS文件。让我感到惊讶的是,它给出了404错误,好像它试图将这些静态文件作为路由提供服务一样。没有人似乎有这个问题,所以我显然做了一些事情(或错过了某些事情)愚蠢。
有问题的文件位于相对于perl文件(errorddemo.pl)的./css和./js目录中。我尝试过使用和不使用前导'/',以及我能想到的任何其他变体。
这是代码:
#!/usr/bin/env perl
use Mojolicious::Lite;
get '/' => sub {
my $c = shift;
$c->render('index');
};
app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>
%= stylesheet '/css/bootstrap-3.3.2-dist/css/bootstrap.css'
</head>
<body>
<p>blah
%= javascript '/js/jquery-2.1.3.js'
</body>
</html>
当我运行morbo errordemo.pl
并浏览到:3000时,我明白了:
[Sun Jan 25 00:24:04 2015] [debug] GET "/".
[Sun Jan 25 00:24:04 2015] [debug] Routing to a callback.
[Sun Jan 25 00:24:04 2015] [debug] Rendering template "index.html.ep" from DATA section.
[Sun Jan 25 00:24:04 2015] [debug] 200 OK (0.005127s, 195.046/s).
[Sun Jan 25 00:24:04 2015] [debug] GET "/css/bootstrap-3.3.2-dist/css/bootstrap.css".
[Sun Jan 25 00:24:04 2015] [debug] Template "not_found.development.html.ep" not found.
[Sun Jan 25 00:24:04 2015] [debug] Template "not_found.html.ep" not found.
[Sun Jan 25 00:24:04 2015] [debug] Rendering inline template "3e3201ab0667c1fc7f39089209f0435c".
[Sun Jan 25 00:24:04 2015] [debug] Rendering inline template "b2d451b47e2053ce583cbfdf7bcc6006".
[Sun Jan 25 00:24:04 2015] [debug] 404 Not Found (0.045663s, 21.900/s).
[Sun Jan 25 00:24:04 2015] [debug] GET "/js/jquery-2.1.3.js".
[Sun Jan 25 00:24:04 2015] [debug] Template "not_found.development.html.ep" not found.
[Sun Jan 25 00:24:04 2015] [debug] Template "not_found.html.ep" not found.
[Sun Jan 25 00:24:04 2015] [debug] Rendering cached inline template "3e3201ab0667c1fc7f39089209f0435c".
[Sun Jan 25 00:24:04 2015] [debug] Rendering cached inline template "b2d451b47e2053ce583cbfdf7bcc6006".
[Sun Jan 25 00:24:04 2015] [debug] 404 Not Found (0.009863s, 101.389/s).
生成的HTML是:
<!DOCTYPE html>
<html>
<link href="/css/bootstrap-3.3.2-dist/css/bootstrap.css" rel="stylesheet" />
</head>
<body>
<p>blah
<script src="/js/jquery-2.1.3.js"></script>
</body>
答案 0 :(得分:7)
您可以通过在app->static->paths
修改数组引用来指定其他文件夹:
push @{app->static->paths} => '.';
答案 1 :(得分:5)
我不推荐tempire的建议,因为它会将你的完整项目文件夹(包括errordemo.pl和任何私人配置文件)公开给公众。
将来,我建议您调查paths
设置的内容:
warn join ":", @{app->static->paths};
这些有趣的内容可以让您了解Mojolicious在哪里查找静态文件和模板。
warn join ":", @{app->static->paths};
warn join ":", @{app->static->classes};
warn join ":", @{app->renderer->paths};
warn join ":", @{app->renderer->classes};
请注意&#34;路径&#34;在&#34;类&#34;之前有优先权。您可以在此处阅读有关属性的更多信息: