2013-10-17 11 views
34

Sto cercando di ottenere Plack::App::CGIBin per lavorare con Apache2 e FastCGI su FreeBSD 8.2. L'obiettivo finale è quello di essere in grado di utilizzare questa configurazione per servire un intero gruppo di script CGI legacy tramite Plack, al fine di sfruttare le sue capacità di middleware, ma non sono stato in grado di ottenere nemmeno un semplice esempio di lavoro.Plack :: App :: CGIBin tramite Apache e mod_fastcgi - Script CGI non trovato

ho seguito la documentazione CPAN su Plack::Handler::FCGI e Plack::App::CGIBin in sé, ma non sono sicuro se mi manca qualcosa o fare qualcosa di sbagliato che non è coperto da quei documenti.

Questa è la configurazione di Apache ho aggiunto:

# Set up external server 
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket 

# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/ 

comando per eseguire server esterni:

plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi 

Il server viene avviato correttamente, restituendo il seguente:

FastCGI: manager (pid <pid>): initialized 
FastCGI: manager (pid <pid>): server (pid <pid>) started 
FastCGI: server (pid <pid>): initialized 

Questa è app.psgi:

#!/usr/bin/env plackup -s FCGI 

use Plack::App::CGIBin; 
use Plack::Builder; 

my $app = Plack::App::CGIBin->new(
    root => '/data/www/plack', 
)->to_app; 

builder { 
    mount "/plack" => $app; 
}; 

Ho quindi un semplice script CGI su /data/www/plack/test.cgi (questo file funziona correttamente in CGI.pm).

Quello che mi aspetto è che una richiesta a http://<domain>/plack/test.cgi/ (compresa la barra finale) restituisca lo script di test, ma ottengo sempre il seguente errore 404 nel log degli errori di Apache, che credo stia tornando dal FastCGI server:

FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>; 

devo FastCGI lavorare in proprio, utilizzando mod_fastcgi e un semplice script di esempio in una directory con SetHandler fastcgi-script applicata, così almeno che ha lavorato :-).

Qualcuno ha ricevuto Plack::App::CGIBin in uno scenario simile? Apprezzerei molto ogni intuizione!

Grazie

+0

Forse è utile se si utilizza un server TCP invece del file socket, ad es. nella direttiva FastCgiExternalServer '-host 127.0.0.1: 5001' e nel plackup cmdline' -listen 127.0.0.1: 5001'. –

+0

Grazie per la tua risposta Slaven - sfortunatamente ottengo ancora lo stesso errore, il che suggerisce che la connessione socket, comunque stabilita, è OK, ed è il server FCGI che ha il problema. –

+0

Non so se ci sia mai stato da nessuna parte con questo, ma la richiesta GET registrata è per '/ plack/placktest /', e non vedo dove si usa la stringa placktest tranne nella cosa che si fa alias/plack/a - il che mi fa pensare che non appartenga alla richiesta GET. –

risposta

1

direi è necessario modificare

builder { 
    mount "/plack" => $app; 
}; 

a

builder { 
    mount "/" => $app; 
}; 

perché l'alias è la rimozione/plack/

o semplicemente cambiare

# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/ 

a

# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/plack/ 

Dopo tutto non sembra essere una questione di Perl, ma un amministratore di sistema uno, sulla configurazione di Apache.

Problemi correlati