在一个Mojolicious :: Lite应用程序中,我有一个路由,我想杀死服务器并重定向到另一个站点。这是片段。
my $me = $$;
get '/kill' => sub {
my $self = shift;
$self->res->code(301);
$self->redirect_to('http://www.google.com');
$self->app->log->debug("Goodbye, $name.");
# I need this function to return so I delay the kill a little.
system("(sleep 1; kill $me)&");
};
这段代码符合我的要求,但感觉不对。我试过了$ self-> app->停止但是没有。
我是否应该使用适当的技术来访问服务器?
尼基
答案 0 :(得分:5)
当然,有几种方法可以做到这一点。
可能最好的方法是简单地将完成处理程序附加到事务中:
#!/usr/bin/env perl
use Mojolicious::Lite;
get '/kill' => sub {
my $c = shift;
$c->redirect_to('http://google.com');
$c->tx->on( finish => sub { exit } );
};
app->start;
与您的示例最相似的方法是设置Mojo::IOLoop
timer,等待几秒钟然后退出。
#!/usr/bin/env perl
use Mojolicious::Lite;
use Mojo::IOLoop;
get '/kill' => sub {
my $c = shift;
$c->redirect_to('http://google.com');
my $loop = Mojo::IOLoop->singleton;
$loop->timer( 1 => sub { exit } );
$loop->start unless $loop->is_running; # portability
};
app->start;