Didn't know about minion. I will check it out. 

Thanks ,

IA

On Thursday, April 28, 2016 at 8:34:52 AM UTC-4, Jan Henning Thorsen wrote:
>
> Ivan: It's not a safe thing to do "something else" after the request has 
> been sent to the client. At least not if you use hypnotoad / prefork. The 
> reason for this is that the children gets recycled from time to time, and 
> doing that might kill the outgoing request.
>
> I would much rather suggest putting minion or some other queue system in 
> the middle which can handle the slow requests.
>
>
> On Wednesday, April 27, 2016 at 3:28:45 PM UTC+2, Iván Aponte wrote:
>>
>> Hello, 
>>
>> Thanks. The error was that I was creating my own UserAgent and not using 
>> the helper in the controller.
>>
>> On Tuesday, April 26, 2016 at 10:31:10 PM UTC-4:30, Scott Wiersdorf wrote:
>>>
>>> No, the UA here is part of the controller object that doesn't go out of 
>>> scope. You're doing something else wrong but we can't see it from here.
>>>
>>> In terminal 1, example.pl:
>>> #!/usr/bin/env perl
>>> use Mojolicious::Lite;
>>>
>>> post '/' => sub {
>>>   my $c = shift;
>>>   $c->render(json => {message => "worked"});
>>> };
>>>
>>> app->start;
>>>
>>> $ ./example.pl daemon -l "http://*:3000";
>>>
>>> In terminal 2, caller.pl:
>>> #!/usr/bin/env perl
>>> use Mojolicious::Lite;
>>>
>>> get '/' => sub {
>>>     my $c = shift;
>>>     $c->ua->post(
>>>         'http://localhost:3000',
>>>         sub {
>>>             my ($ua, $tx) = @_;
>>>             $c->app->log->debug($c->app->dumper($tx->res->json));
>>>         }
>>>     );
>>>
>>>     $c->render(status => 200, data => "thanks");
>>> };
>>>
>>> app->start;
>>>
>>> $ ./caller.pl daemon -l "http://localhost:3001";
>>>
>>> In a 3rd terminal:
>>>
>>> $ curl http://localhost:3001/
>>> thanks
>>>
>>> Logs for example:
>>> $ ./example daemon -l "http://*:3000";
>>> [Tue Apr 26 20:58:33 2016] [info] Listening at "http://*:3000";
>>> Server available at http://127.0.0.1:3000
>>> [Tue Apr 26 20:58:36 2016] [debug] POST "/"
>>> [Tue Apr 26 20:58:36 2016] [debug] Routing to a callback
>>> [Tue Apr 26 20:58:36 2016] [debug] 200 OK (0.000603s, 1658.375/s)
>>>
>>> Logs for caller.pl:
>>>
>>> $ ./caller daemon -l "http://localhost:3001";
>>> [Tue Apr 26 20:56:44 2016] [info] Listening at "http://localhost:3001";
>>> Server available at http://localhost:3001
>>> [Tue Apr 26 20:58:36 2016] [debug] GET "/"
>>> [Tue Apr 26 20:58:36 2016] [debug] Routing to a callback
>>> [Tue Apr 26 20:58:36 2016] [debug] 200 OK (0.000994s, 1006.036/s)
>>> [Tue Apr 26 20:58:36 2016] [debug] {
>>>   "message" => "worked"
>>> }
>>>
>>> Working as advertised.
>>>
>>> Scott
>>>
>>> On Tuesday, April 26, 2016 at 6:29:48 PM UTC-6, Iván Aponte wrote:
>>>>
>>>> Hello,
>>>>
>>>> I just tried the way you suggest but got the same error. Seems to me 
>>>> that UA goes out of scope and dies. Is there a way to prevent this
>>>>
>>>> Regards, 
>>>>
>>>> IA
>>>>
>>>> On Tuesday, April 26, 2016 at 7:39:19 PM UTC-4:30, Scott Wiersdorf 
>>>> wrote:
>>>>>
>>>>> Is there a reason you can't do something like this?:
>>>>>
>>>>> sub res1{
>>>>>   my $c=shift;
>>>>>   $c->ua->post('http://www.example.com', sub {
>>>>>     my ($uax, $txx) = @_;
>>>>>      $c->app->log->debug(Dumper($txx));
>>>>>   });
>>>>>
>>>>>   $c->render(status=>200,data=>'');
>>>>> }
>>>>>
>>>>> The way you're doing it, the transaction goes out of scope which is 
>>>>> probably why you get the premature connection close. In the above 
>>>>> example, 
>>>>> the post() will return immediately, allowing the render() to execute 
>>>>> next. 
>>>>> The post() response will be handled asynchronously whenever it comes 
>>>>> back. 
>>>>>
>>>>> Scott
>>>>>
>>>>> On Tuesday, April 26, 2016 at 5:57:17 PM UTC-6, Iván Aponte wrote:
>>>>>>
>>>>>>  Hello, 
>>>>>>
>>>>>> I have the following problem. I have a service which gets call, it 
>>>>>> must answer with 200, close the connection and post to another web 
>>>>>> service. 
>>>>>> If I do it in a non-blocking way premature closing occurs. 
>>>>>>
>>>>>> E.g. : 
>>>>>>
>>>>>> sub res1{
>>>>>>   my $c=shift;
>>>>>>    $c->render(status=>200,data=>'');
>>>>>>    my $ua = Mojo::UserAgent->new;
>>>>>>    my $tx = $ua->build_tx(POST => 'http//www.example.com');
>>>>>>    $ua->start($tx=> sub{
>>>>>>     my ($uax, $txx) = @_;
>>>>>>      $c->app->log->debug(Dumper($txx));
>>>>>>    });
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>> Is there a way to make a post after rendering without blocking ?
>>>>>>
>>>>>>
>>>>>> Thanks, 
>>>>>>
>>>>>> IA
>>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to