2012-02-23 27 views
5

Trong mã perl Mojolicious của tôi, tôi xử lý một công việc được tạo và xem từ một ứng dụng khách từ xa.Toàn cầu và Chủ đề trong Mojolicious để xử lý các đường dẫn khác nhau

Tôi giữ các công việc trong một mảng băm, đây là biến toàn cục.

Sau đó nó được sử dụng trong trình xử lý PUT '/ job/create' và GET '/ job/status'. Khi thêm một công việc mới với PUT '/ job/create', mảng được mở rộng trong chương trình con (nó chứa 4 phần tử trong mã bên dưới), nhưng khi yêu cầu trạng thái công việc thông qua GET '/ job/status' danh sách các công việc , mảng không chứa các phần tử được thêm vào (số lượng là 2 yếu tố).

Cảm ơn, Jan

Đây là mã:

#!/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(); 

Trả lời

6

này sẽ không thực sự làm việc, như hypnotoad là sử dụng nĩa, chứ không phải chủ đề. Tôi đề nghị lưu trữ dữ liệu trong một cái gì đó giống như một cơ sở dữ liệu hoặc Cache::FastMmap.

+0

Cảm ơn sự giúp đỡ. Cuối cùng, tôi chuyển sang một giải pháp với CouchDB. Trông khá đẹp btw. :) –

+0

Thay thế 'perl your.app daemon -l 'http: // *: 3000'' cũng có thể hoạt động. [xem Máy chủ web tích hợp] (http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Built2Din_web_server) – klekker

Các vấn đề liên quan