Dove posso trovare errori di runtime delle applicazioni utilizzando Nginx, Starman, Plack e Catalyst?

StackOverflow https://stackoverflow.com/questions/3719935

Domanda

Ho gestito con successo al server il mio Catalyst applicazione sulla mia macchina di sviluppo utilizzando Plack + Starman , utilizzando uno script daemon che sulla base di quello che ho trovato in di Dave Rolsky Silki distribuzione.

Ho quindi istituito nginx al proxy inverso al mio assistente di Starman, e alias la directory statica per nginx per servire. Fin qui tutto bene. Tuttavia, sono in perdita da dove si suppone che il mio STDERR applicazione da logging. Non sta raggiungendo nginx (suppongo che abbia un senso), ma non riesco a trovare molta documentazione su dove Starman può essere registrando - se ovunque. Ho avuto uno sguardo al moduli middleware di Plack ma solo opzioni sega per log di accesso.

Può qualcuno aiutarlo?

È stato utile?

Soluzione

Sta andando da nessuna parte. Catalyst::Log sta inviando dati a STDERR, e lo script di init sta inviando STDERR a /dev/null.

Avete alcune scelte fondamentali:

  1. Sostituire Catalyst::Log con qualcosa come Catalyst :: Accedi :: log4perl o semplicemente una sottoclasse di Catalyst::Log con _send_to_log sovrascritto -. uno dei due vi permetterà di inviare l'output di registrazione altrove rispetto STDERR

  2. scrivere del codice che viene eseguito a livello PSGI di gestire un file di log e riaprono STDERR ad esso. Ho provato questo, non è stato molto piacevole. File di log sono più difficili di quanto sembrano.

  3. Usa FastCGI invece, e avrete un flusso di errore che invia l'output di nuovo log al server web. È comunque possibile utilizzare Plack via Plack :: :: Handler fcgi / Plack :: :: Handler fcgi :: Engine ( mi raccomando il secondo, perché il fcgi :: codice motore è molto più recente e più bello di FCGI.pm).

Altri suggerimenti

Mi rendo conto che è molto tempo da quando la questione è stato chiesto, ma ho appena colpito lo stesso problema ...

In realtà hanno un'opzione più di Hobbs menzionato.

Non è proprio la "init script" che sta inviando STDERR a / dev / null, è Starman.

Se si guarda il codice sorgente per Starman, si potrebbe scoprire che, se gli date la bandiera --background, utilizza MooseX::Daemonize::Core.

E una volta che si sa che, la sua documentazione vi dirà che si chiude deliberatamente STDERR, STDOUT e STDIN e li ri-indirizza a / dev / null, e che ci vogliono le variabili d'ambiente MX_DAEMON_STDERR e MX_DAEMON_STDOUT come nomi di file da utilizzare invece.

Quindi, se si avvia il server di catalizzatore con MX_DAEMON_STDERR impostato su un nome di file, STDERR andrà a quel file.

Oggi Starman ha una linea di comando --error-log che permette di reindirizzare i messaggi di errore in un file.

documentazione starman :

  

- error-log

     

Specifica il percorso di un file in cui il log degli errori deve essere scritto. Questo consente di avere ancora l'accesso agli errori quando si utilizza --daemonize.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top