2013-09-26 9 views
6

na moim serwerze stage chciałbym aktywować debugowanie, aby klienci mogli znaleźć błędy, zanim aplikacja przejdzie do serwera produkcyjnego.Mniej szczegółowy ekran debugowania w Catalyst?

ALE chcę tylko pierwszą część wiadomości, a nie Żądanie lub Dane sesji.

Na przykład: Nie można wyświetlić szablonu "templates/home.tt2: błąd pliku - templates/inc/heater: not found".

Wiadomość jest wystarczająca dla mnie i dla mojego klienta, aby zobaczyć, że wywołanie "nagłówka" jest niepoprawnie napisane.

Żądanie ma wiele nieistotnych informacji dla klienta, ale posiada również wiele wewnętrznych informacji, które powinny być ukryte przez cały czas !!

Pozdrowienia

Odpowiedz

3

to, co chcesz, aby zastąpić dump_these metodę Catalyst. Zwraca listę rzeczy do wyświetlenia na stronie debugowania błędów Catalyst.

Domyślna implementacja wygląda następująco:

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

ale można uczynić go bardziej restrykcyjne, na przykład

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

byś zdefiniował dump_these w module głównym Twojej aplikacji - ten, w którym use Catalyst .

+0

Wielki !, ale w zwykłym pliku MyApp.pm po "Użyj Catalyst ..." wszystko, co mam są konfiguracje pakietów, jak __PACKAGE __-> config (encoding => 'UTF-8') Więc nie wiem, jak wstawić tutaj podprogram. Próbowałem wkleić kod taki, jaki jest, na wypadek gdyby zadzwonił, ale nie działa. – MIguelele

+1

To powinno być w porządku. Wtedy chcesz 'dump_these' zdefiniowany w pakiecie' MyApp'. Jeśli nie masz pewności, do którego pakietu należy ta metoda, i możesz znieść ostrzeżenie "SubRoutine redefined ...", możesz również zdefiniować to jako 'sub Catalyst :: dump_these {...}'. – mob

+0

Witaj, @ mob, spróbowałem jeszcze raz. Teraz mogę usunąć blokady i konfigurację bloków. Mogę dodać bloki, takie jak Twoja propozycja "Przeprosin". Ale jeśli usunę (lub po prostu zmienię) odpowiedź, pojawi się ekran debugowania, ale w konsoli otrzymuję wyjątek w silniku "Nie można wywołać metody" status "na niezdefiniowanej wartości ...". Jeśli usunę blok żądania, otrzymam wyjątek całkowitego niepowodzenia, bez ekranu i metody "Nie można wywołać" "...". Jakieś sugestie? – MIguelele

1

Miałem podobny problem, który rozwiązałem przez przesłonięcie metody Catalyst log_request_parameters.

Coś jak to (jak @mob powiedział, umieścić go w głównym module):

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); 
} 

Ale można też po prostu wrócić na początku, jeśli nie chcesz żadnych parametrów GET/POST wyświetlanych .

0

Cóż, ja nie myślę o bardziej oczywiste rozwiązanie, w przypadku: można po prostu ustawić poziom dziennika do czegoś wyższego niż debug, który uniemożliwiałby te debug dzienniki, które są wyświetlane, ale zachować error dzienniki :

# (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; 
} 
Powiązane problemy