Dove posso trovare errori di runtime delle applicazioni utilizzando Nginx, Starman, Plack e Catalyst?
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?
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:
-
Sostituire
Catalyst::Log
con qualcosa come Catalyst :: Accedi :: log4perl o semplicemente una sottoclasse diCatalyst::Log
con_send_to_log
sovrascritto -. uno dei due vi permetterà di inviare l'output di registrazione altrove rispetto STDERR -
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.
-
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.
- 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
.