2014-04-04 2 views
3

Mojolicious :: Lite 앱에는 서버를 죽이고 다른 사이트로 리디렉션하려는 경로가 있습니다. 다음은 스 니펫입니다.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-> stop을 시도했지만 사용할 수 없습니다.

서버에 액세스하기 위해 사용해야하는 적절한 기술이 있습니까?

니키

답변

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; 
+0

감사합니다. 두 방법 모두 매력처럼 작동합니다. 나는 트랜잭션에서 finish 핸들러를 사용할 것이라고 생각한다. 아주 멋지다. – Nicky

관련 문제