2010-04-06 30 views
5

Come posso eseguire il mio script CGI perl senza apache? Questo è a scopo di test, quindi una sorta di server a processo singolo che elabora solo una richiesta alla volta dovrebbe essere sufficiente per me.Come posso eseguire il mio script CGI perl senza apache?

+0

Usi CGI.pm? –

+1

Perché non vuoi usare Apache? Sembrerebbe strano non testare in un ambiente simile all'ambiente di produzione previsto. –

+0

Script shoud essere eseguito come utente specifico e attualmente non voglio installare suexec su testing apache. –

risposta

1

Script shoud essere eseguito come utente specifico e attualmente non voglio configurare suexec sui test apache.

Non c'è nulla impedisce di duplicare la configurazione necessaria Apache tranne che per l'utente in base al quale httpd sta per essere eseguito, l'interfaccia/porto per l'associazione a ed eventualmente la directory cgi-bin e l'esecuzione di una copia separata di httpd (con l'opzione -f). Quello sarebbe il modo più sicuro per testare l'applicazione nell'ambiente che si suppone sia in esecuzione.

Vedi Starting Apache:

è possibile specificare la sua posizione in fase di esecuzione utilizzando l'opzione -f della riga di comando come in

/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf 
5

Plack::App::WrapCGI o Plack::App::CGIBin rappresentano un modo per fare questo (insieme con plackup e il server HTTP Plack single-threaded di default), ma non è in esecuzione il CGI nel contesto che realmente si aspettano di essere eseguito in (un processo autonomo), quindi è non del tutto carino (gli stessi avvertimenti valgono come usare il registro modperl, più o meno). Non sono a conoscenza di un server web puro perl che in realtà forchetta ed esegue CGI come CGI (né uno non perl che esegue CGI e richiede zero config, sebbene lighttpd si avvicini).

Il motivo per cui "stai utilizzando CGI.pm" è una domanda pertinente perché se non hai già avviato l'applicazione potresti prendere in considerazione la scrittura contro praticamente qualsiasi cosa altro, ad es.

(in ordine casuale per nascondere la mia evidente favoritismo) una ottenere la possibilità di eseguire facilmente la stessa app di un server HTTP standalone, FastCGI, mod_perl app o semplice CGI se arriva a spingere, e senza la mancata corrispondenza dell'impedenza che si ottiene scrivendo nell'interfaccia di CGI.pm

+0

Ok, forse proverò Web :: Simple per quello script (è piuttosto semplice, quindi non penso che un framework specifico mi aiuterà molto). In ogni caso, ho trovato una semplice soluzione per il problema iniziale: "python -m CGIHTTerver 8080" servirà script nella sottocartella "cgi-bin" come CGI. –

3

Dal hai menzionato nei commenti che stai utilizzando CGI.pm, nota che CGI.pm offre una gamma di opzioni per l'esecuzione di script CGI dalla riga di comando. Vedi http://perldoc.perl.org/CGI.html#DEBUGGING. Anche senza CGI.pm, puoi sempre solo simulare le variabili d'ambiente necessarie e inserire il pipe nel tuo file. In pratica tutto quello che dovete fare per eseguire un CGI dalla riga di comando è impostare

QUERY_STRING = blah=x&fu=bar 

per i metodi GET o

CONTENT_LENGTH = length of your file 

per i metodi POST.

+0

A meno che non si desideri utilizzare un browser Web ... – hobbs

+0

Inserire l'output in un file e aprire il file con il browser web. –

+0

Devi anche impostare 'REQUEST_METHOD' (= GET/POST), almeno il mio CGI.pm non ha capito la richiesta senza di esso. – Dallaylaen

0

Procuratevi una macchina virtuale e fare quello che come con esso, compreso l'esecuzione di apache. Duplica il più possibile l'impostazione del target.

Problemi correlati