如何正确关闭Mojolicious :: Lite服务器?

时间:2014-04-04 19:34:42

标签: perl mojolicious

在一个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->停止但是没有。

我是否应该使用适当的技术来访问服务器?

尼基

1 个答案:

答案 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;