2013-09-26 14 views
6

nel mio server stage Vorrei attivare il debug in modo che i client possano trovare gli errori da soli prima che l'app passi al server di produzione.Schermata di debug meno dettagliata in Catalyst?

MA VOGLIO solo la prima parte del messaggio, non la richiesta oi dati di sessione.

Ad esempio: Impossibile rendere il modello "templates/home.tt2: file error - templates/inc/heater: non trovato".

Il messaggio è sufficiente per me e il mio client per vedere che la chiamata "intestazione" è errata.

La richiesta ha molte informazioni irrilevanti per il cliente, ma ha anche MOLTE informazioni di sviluppo interne che dovrebbero essere nascoste tutto il tempo !!

saluti

risposta

3

quello che vuoi è sovrascrivere il metodo di Catalyst dump_these. Questo restituisce una lista di cose da mostrare sulla pagina di debug degli errori di Catalyst.

L'implementazione di default si presenta come:

sub dump_these { 
    my $c = shift; 
    [ Request => $c->req ], 
    [ Response => $c->res ], 
    [ Stash => $c->stash ], 
    [ Config => $c->config ]; 
} 

ma si può rendere più restrittivo, per esempio

sub dump_these { 
    my $c = shift; 
    return [ Apology => "We're sorry that you encountered a problem" ], 
      [ Response => substr($c->res->body, 0, 512) ]; 
} 

definirebbe dump_these nel modulo principale della tua app - quello dove si use Catalyst .

+0

grande !, ma nel solito file di MyApp.pm, dopo l ' "uso Catalyst ..." tutto quello che ho sono le configurazioni dei pacchetti, come __PACKAGE __-> config (encoding => 'UTF-8') Quindi non so come inserire qui una subroutine. Ho provato a incollare il codice così com'è, nel caso in cui suoni il campanello, ma non funziona. – MIguelele

+1

Questo dovrebbe essere giusto. Allora dovresti 'dump_these' definito nel pacchetto' MyApp'. Se non si è sicuri del pacchetto a cui appartiene questo metodo e si può tollerare un avviso di 'Subroutine ridefinito ...', si potrebbe anche definirlo come 'sub Catalyst :: dump_these {...}'. – mob

+0

Ciao, @ mob, ho provato di nuovo. Ora posso rimuovere i blocchi Stash e Config. Posso aggiungere blocchi come il tuo suggerimento "Scuse". Ma se rimuovo (o cambio solo) Response, appare la schermata di debug, ma nella console ottengo un'eccezione nel motore 'Can not call method" status "su un valore indefinito ...'. Se rimuovo il blocco Request ottengo un'eccezione di crash totale, senza schermo e metodo "Can not call method" "...". Qualche suggerimento? – MIguelele

1

Ho avuto un problema simile che ho risolto sovrascrivendo il metodo Catalyst log_request_parameters.

Qualcosa di simile (come @mob detto, mettere in modulo principale):

sub log_request_parameters { 
    my $c   = shift; 
    my %all_params = @_; 

    my $copy = Clone::clone(\%all_params); # don't change the 'real' request params 

    # Then, do anything you want to only print what matters to you, 
    # for example, to hide some POST parameters: 
    my $body = $copy->{body} || {}; 
    foreach my $key (keys %$body) { 
     $body->{$key} = '****' if $key =~ /password/; 
    } 

    return $c->SUPER::log_request_parameters(%$copy); 
} 

Ma si potrebbe anche semplicemente tornare all'inizio, se non si desidera che i parametri GET/POST visualizzati .

0

Beh, non pensavo che la soluzione più evidente, nel tuo caso: si può semplicemente impostare il livello di log di qualcosa di superiore debug, che impedirebbe queste debug log vengano visualizzati, ma manterrebbe le error log :

# (or a similar condition to check you are not on the production server) 
if (!__PACKAGE__->config->{dev}) { 
    __PACKAGE__->log->levels('warn', 'error', 'fatal') if ref __PACKAGE__->log; 
} 
Problemi correlati