gpt4 book ai didi

perl - 从 mojolicious 提供静态目录而不是/public

转载 作者:行者123 更新时间:2023-12-01 03:35:53 24 4
gpt4 key购买 nike

我看过 varietyplaces找到从 中提供静态文件目录的最佳方式应用程序,这是我所能得到的最接近的:

package ExampleServer;
use Mojo::Base 'Mojolicious';
use Mojolicious::Static;

# This method will run once at server start
sub startup {
my $self = shift;

$ENV{MOJO_REVERSE_PROXY} = 1;

# TODO: generalize
my $static_path = '/www/example/docroot/.well-known/acme-challenge/';

# Router
my $r = $self->routes;

# Normal route to controller
$r->get('/')->to('example#welcome');

# serve static directory
$r->get('/.well-known/acme-challenge/*filename' => sub {
my $self = shift;
my $filename = $self->stash('filename');
my $fqfn = $static_path . $filename;
$self->app->log->debug($fqfn);
my $static = Mojolicious::Static->new( paths => [ $static_path ] );

$static->serve($self, $fqfn);
$self->rendered;
});
}

1;

这是正确提取文件名,它只影响我想要的 URL,但它提供空文件,无论它们是否存在于该目录中。我错过了什么?

最佳答案

可能最简单的方法是使用插件 RenderFile :

package ExampleServer;
use Mojo::Base 'Mojolicious';
use Mojolicious::Static;

# This method will run once at server start
sub startup {
my $self = shift;

$self->plugin('RenderFile');

$ENV{MOJO_REVERSE_PROXY} = 1;

# TODO: generalize
my $static_path = '/www/example/docroot/.well-known/acme-challenge/';

# Router
my $r = $self->routes;

# Normal route to controller
$r->get('/')->to('example#welcome');

# serve static directory
$r->get('/.well-known/acme-challenge/*filename' => sub {
my $self = shift;
my $filename = $self->stash('filename');
my $fqfn = $static_path . $filename;
$self->app->log->debug($fqfn);
$self->render_file(filepath=> $fqfn, format => 'txt', content_disposition => 'inline' );
});
}

或者你可以从 source获得灵感.

关于perl - 从 mojolicious 提供静态目录而不是/public,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com