Kilku użytkowników niedawno zadeklarowało nam, że mają doświadczenie z charakterystycznym modułem obsługi błędów Rails.
Zatwierdzono: Fortect
Jak Murphy twierdzi, że egzekwowanie prawa Wszystko, co może pójść nie tak, pójdzie nie tak, zazwyczaj dlatego tak ważne jest, aby być na to trochę lepiej przygotowanym. Dotyczy to wszędzie, nawet w rozwoju oprogramowania. Aplikacja, którą tworzymy, będzie wystarczająco solidna, aby sobie z tym poradzić. Innymi słowy, musi być stabilny. To jest zwykle temat tego wpisu na blogu. Jeśli
coś może pójść nie tak, bardzo dobrze może dojść do błędnej decyzji.
– Prawo Murphy’ego
W Rails, określonym przepływie pracy, zajmijmy się błędami w dyplomie instrukcji. Załóżmy na przykład, że piszesz tekst API przy użyciu Railsów. Rozważ następujący kontroler gier jako alternatywę dla renderowania niestandardowego kodu JSON.
Jeśli każdy niestandardowy element zostanie znaleziony, wyrenderuje dowolny Json, w przeciwnym razie zwróci wielki błąd JSON. To jest naprawdę typowy sposób na ostateczne napisanie bieżącej metody w Railsach. Ale irrll powiem ci haczyk. Jeśli rejestracja użytkownika nie zostanie rozpoczęta, nie przeskoczy do bloku else potknięcia, ale zamiast tego wyświetla zawartość Fallback-500.html. Cóż, to było nieoczekiwane. Wynika to z pewnego rodzaju faktu, że gdy rekord nie jest udowodniony, pojawia się rzeczywisty błąd RecordNotFound. To samo w find_by! lub dowolna metoda Findera ze zwrotem.
Wyjątek! Włącza błąd
Zanim będziemy mogli naprawić błędy, musimy zrozumieć jedną szczególnie ważną. Jak widać na powyższym przykładzie, otrzymujemy błąd ActiveRecord :: RecordNotFound. Próba złapania rubinu zacznie wyglądać mniej więcej tak i to jest w porządku.
Ale jeśli chcesz najpierw uniknąć pominięć, naprawdę ważne jest, aby przy ulepszaniu znać różnicę między wyjątkami jak również błąd Ruby. Nigdy nie ratuj się przed eliminacją. Ma na celu obsługę każdego wyjątku, który przychodzi z klasy wyjątków indywidualnie i ostatecznie zmniejsza wykonanie.
Zamiast tego musimy spróbować z błędem standardowym. Oto skuteczny artykuł na stronie wyjaśniający konsekwencje, które naprawdę czuję http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/.
Ratunek
Aby poradzić sobie z prawdziwymi szkodnikami, możemy zastosować blokowanie awarii. Zmniejszenie odzyskiwania jest takie samo, jak blok try..catch, na wypadek, gdybyś pochodził ze świata Java. Oto po prostu ta sama kopia w punkcie a z bardzo oszczędnym blokiem.
Dzięki takiemu podejściu Twoje błędy są podpisywane w sposób i środki kontroli. Chociaż działa to dobrze, zdecydowanie nigdy nie jest to najlepsze podejście do rozwiązywania problemów. Oto powody dla świetnego alternatywnego podejścia.
- Gruby Przeczytaj doskonały artykuł o Thinkbotach swojej firmy https://robots.oughttbot.com/skinny-controllers- Chude modele.
- Zasada DRY-We: wystarczy ponownie zatrzymać błąd w różnych punktach, co łamie zasadę DRY (Don’t Repeat Yourself).
- Łatwość utrzymania: trudniejsze zarządzanie kodem. Zmienia jakiś błąd, a format pociąga za sobą duże zmiany.
Podejściem z możliwością wznowienia byłby odpowiedni blok obsługi błędów rotacji dla ApplicationControllera. Czystszym podejściem jest napisanie wspaniałego modułu obsługi błędów.
Obsługa błędów — podejście modułowe
Aby naprawić błędy układu w określonym czasie, naszą pierwszą opcją jest oflagowanie ich za pomocą ApplicationController . Ale lepiej oddzielić tych ludzi od logiki biznesowej.
Stwórzmy moduł, który obsługuje błędy globalnie. Jak widzisz, stwórz poprawny moduł ErrorHandler (error_handler.rb) i umieść go wewnątrz kursu lib/error (lub gdzieś do pobrania), a ponadto włącz nasz ApplicationController.Load
Ważne: konkretny moduł błędu w aplikacji zaczynał się od rozszerzenia w config i application.rb.
Uwaga: Używam kilku różnych typów razem z renderowaniem wyjścia json. Czy możesz to tutaj zaznaczyć?
Zanim zaczniesz pracę z jakimkolwiek modułem error_handler, oto interesujące zestawienie modułów, które powinieneś dokładnie przestudiować. Jeśli używasz metody “obserwuj self.included” w każdym module, skojarzona metoda zachowuje się tak, jakby ta sytuacja była umieszczona w oryginalnej klasie. Mamy więc tylko moduł ErrorHandler, który prawdopodobnie będzie obecny w ApplicationController.
działajmy Dodajmy ErrorModule do bloków obsługi błędów. To wygląda tak.
Jeśli widzisz błędy ActiveRecord: RecordNotFound, StandardError jest poza tym dziedziczony. Ponieważ mamy do tego specjalną technikę awaryjną, otrzymujemy kompletną: record_not_found. Blok StandardError działa jako pojedyncze narzędzie awaryjne, które obsługuje wszystkie błędy.
Zdefiniuj własny wyjątek.
Możemy również łatwo zdefiniować naszą własną klasę błędu, która pobierana jest z StandardError. Aby uprościć sprawę, możemy również utworzyć nową klasę CustomError, która zawiera możliwości i metody, które są wspólne dla wszystkich klas uczelni zdefiniowanych błędnie. Nasz błąd niestandardowy teraz zwiększa ten błąd klienta.
Możemy nadpisać ustawienia systemowe dla każdego błędu. Przykład NotVisibleError rozszerza CustomError. Jak widać, niektórzy ludzie przewyższają error_message.
Aby naprawić niestandardowe błędy, mój partner i ja musimy tylko wykonać pomoc dla klienta błędów. Możemy również zapisać błąd ekspresowy, gdy chcemy go ponownie potraktować inaczej.
404 i może 500
obsługuje ogólne warunki, takie jak 404 i 500, chociaż dzieje się to wyłącznie przez kradzież dla dewelopera. Musimy stworzyć tam oddzielną klasę kontrolera ze względu na sprawdzanie błędów.
mówi Railsom, aby używały tras do wyjątków rozwiązań. wiersz odpowiadający plikowi application.rb.
config.Exceptions_app = Trasy
teraz spowoduje wycofanie dla # błędów not_found i 500 dla liczby błędów internal_server_error.
Uwagi końcowe
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Podejście modułowe to kurs Railsowy podczas obsługi błędów. Za każdym razem, gdy chcemy zmienić konkretny komunikat o błędzie / format, zastrzegamy sobie możliwość zmiany tego w naszej decyzji. Dzięki takiemu podejściu do kluczowych faktów oddzielamy również najważniejszą logikę użytkowania od obsługi błędów, dzięki czemu kontrolery są bardziej poziome niż zarozumiałe. Najlepiej
uzyskać szyny do cienkich kontrolerów i modeli.
Jest to kompletny komputer źródłowy oprogramowania do obsługi błędów z podejściem modułowym. Proszę kliknąć przycisk „Poleć” przy aktualnym wydarzeniu, które ktoś uznał za pomocne. I możesz normalnie odpowiedzieć, jeśli masz jakiekolwiek praktyczne wątpliwości. Modułowa brawa!
Podejście do usuwania przeszkód na torach.
Przyspiesz teraz wydajność swojego komputera dzięki temu prostemu pobieraniu.