En mi código de Mojolicious Perl manejo un trabajo creado y observado desde un cliente remoto.Globals and Threads en Mojolicious para manejar diferentes rutas
Guardo los trabajos en una matriz de valores hash, que es una variable global.
Se utiliza luego en controladores de PUT '/ job/create' y GET '/ job/status'. Al agregar un nuevo trabajo con PUT '/ job/create' la matriz obtiene extendida en la subrutina (contiene 4 elementos en el código siguiente), pero al solicitar el estado de los trabajos a través de GET '/ job/status' la lista de trabajos , la matriz no contiene los elementos agregados (cuenta con 2 elementos ).
Gracias, Jan
Aquí está el código:
#!/usr/bin/perl -w
use threads;
use threads::shared;
use Mojolicious::Lite;
use Mojo::JSON;
my (%record, %job1, %job2, %job3, @jobs) : shared;
%job1 = (id=>"id1");
%job2 = (id=>"id2");
%job3 = (id=>"id3");
push (@jobs, \%job1);
push (@jobs, \%job2);
app->config(hypnotoad => {listen => ['http://*:3000']});
put '/job/create' => sub {
my $self = shift;
my $obj = Mojo::JSON->decode($self->req->body);
my $id = $obj->{id};
%record = (id => $id);
push (@jobs, \%record); # test the global prefilled
push (@jobs, \%job3); # test the global locally filled
$self->render(text => "Created job id $id. Jobs count: " .
$#jobs);
};
get '/job/status' => sub {
my $self = shift;
my $out = "[";
for(my $i=0; $i<$#jobs+1; $i++) {
$out .= "{id:\"" . $jobs[$i]{id} . "\",";
$out .= "," if $i<$#jobs;
}
$out .= "]";
$self->render(text => "allJobsInfo($out). Num jobs: " . $#jobs);
};
app->start();
Gracias por la ayuda. Al final, pasé a una solución con CouchDB. Se ve muy bien por cierto. :) –
Alternativa 'perl your.app daemon -l 'http: // *: 3000'' podría funcionar, también. [ver el servidor web incorporado] (http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Built2Din_web_server) – klekker