Verschillende gebruikers hebben ons onlangs laten zien dat ze ervaring hebben met een gepersonaliseerde Rails error handler.
Goedgekeurd: Fortect
Strategie voor het afhandelen van fouten in rails.
Wet van Murphy:
Murphy stelt dat ze de wet handhaven Alles wat fout kan gaan, zal fout gaan, daarom is het zo belangrijk om er vaak op voorbereid te zijn. Dit geldt overal, zelfs achter de ontwikkeling van software. De applicatie die we ontwikkelen zal robuust genoeg zijn om dit aan te kunnen. Met andere woorden, het moet stabiel zijn. Dit is vaak het onderwerp van deze blogpost. Als
dingen mis kunnen gaan, moet er een verkeerde beslissing kunnen zijn.
– De wet van Murphy
Laten we in Rails, elke soort workflow, fouten in een range-statement afhandelen. Stel dat u bijvoorbeeld een API kopieert met Rails. Beschouw de volgende regelgever als een alternatief voor het renderen van aangepaste JSON.
Als een volledig aangepast element wordt gevonden, wordt het beschikbaar weergegeven als elke Json, anders wordt de laatste json-fout geretourneerd. Dit is echt de typische manier om de huidige methode daadwerkelijk in Rails te schrijven. Maar kijk eens naar de vangst. Als de gebruikersregistratie niet begint, springt het niet naar de else-strijd, maar geeft het in plaats daarvan de inhoud van Fallback-500.html weer. Nou, dat was onverwacht. Dit komt door het specifieke feit dat Maar waar een record niet wordt aangetroffen, treedt een daadwerkelijke RecordNotFound-fout op. Hetzelfde vooral omdat find_by! of elke Finder-methode met een waarde.
Uitzondering! Schakelt de bug in
Voordat we de bugs waarschijnlijk zullen oplossen, moeten we bijna alles wat belangrijk is begrijpen. Zoals u kunt zien aan de hand van het bovenstaande voorbeeld, krijgen we een ActiveRecord :: RecordNotFound-fout. Proberen om een robijn te vangen zal op je hoede zijn, zoiets als dit, en dat is oké.
Maar als u eerst voorwaarden wilt vermijden, is het op de aandelenmarkt erg belangrijk om het verschil te weten tussen een uitzondering en daarna een Ruby-bug. Red jezelf nooit van het verschil. Het is bedoeld om elke uitzondering die zich uit de uitzonderingsklasse ontvouwt afzonderlijk af te handelen en uiteindelijk de uitvoering te verminderen.
In plaats daarvan moeten we onszelf herstellen met een StandardError. Hier is een ongelooflijk goed artikel op de website waarin de gevolgen worden uitgelegd. Ik ben nu http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/.
Redding
Om met echte beelden om te gaan, kunnen we crash-blokkering gebruiken. Het herstelblokkering is hetzelfde als het try..catch-blok, ongeacht of je uit de Java-wereld komt. Hier is letterlijk hetzelfde exemplaar op punt a met een reserveblok.
Met deze aanpak worden je fouten vastgelegd in de manieren en middelen van de gamecontroller. Hoewel dit prima werkt, is het zeker niet de beste manier om problemen op te lossen. Hier zijn de meeste redenen voor een geweldige alternatieve aanpak.
- Fat Lees dat uitstekende artikel over Thoughtbots https://robots.oughttbot.com/skinny-controllers- Skinny-modellen.
- Het DRY-We-principe: het volstaat om de fout op verschillende punten te kopiëren, waardoor het DRY-principe (Don’t Repeat Yourself) wordt doorbroken.
- Onderhoudbaarheid: moeilijker te beheren code. Verandert de exacte fout, en het formaat zou grote veranderingen met zich meebrengen.
Een hervatbare benadering zou het specifieke rotatiefoutafhandelingsblok voor de ApplicationController zijn. Een schonere aanpak is om een ongelooflijk goede foutmodule-handler te schrijven.
Foutafhandeling – een modulaire aanpak
Om bijvoorbeeld lay-outfouten op te lossen, is onze eerste optie om het te markeren als het gaat om de ApplicationController . Maar het is beter om ze te scheiden van de bedrijfslogica.
Laten we een module maken die fouten globaal afhandelt. Maak alle juiste ErrorHandler-module (error_handler.rb) en plaats deze wanneer deze in lib / error staat (of ergens om te downloaden) en schakel tenslotte onze ApplicationController.Load in
Belangrijk: de specifieke foutmodule in de applicatie moet zonder twijfel beginnen met uitbreiding in config – application.rb.
Opmerking: ik gebruik er verschillende om verschillende typen te helpen die zijn uitgerust met json-uitvoerweergave. Kun je controleren of het hier weg is?
Voordat u aan een error_handler-module begint, volgt hier een interessant artikel over modules die u volledig moet bestuderen. Als je de methode “observe self.included” in een mooie module gebruikt, gedraagt de bijbehorende methode zich alsof de applicatie in de oorspronkelijke klasse was geplaatst. We hebben dus alleen de ErrorHandler-module, die ook echt aanwezig is in de ApplicationController.
laten we handelen Laten we de ErrorModule naar de foutafhandelingsblokken brengen. Het ziet er zo uit.
Als je ActiveRecord: RecordNotFound-fouten ziet, is StandardError meer geërfd. Omdat we hiervoor een speciale terugvalstrategie hebben, krijgen we een compleet: record_not_found. Het StandardError-blok fungeert als een enkele terugvalprocedure die alle fouten afhandelt.
Definieer uw eigen uitzondering.
We zullen ook in staat zijn om onze eigen foutklasse te definiëren die wordt opgehaald uit StandardError. Om het eenvoudig te houden, kunnen we mogelijk een nieuwe CustomError-klasse maken die verzamelingen en methoden bevat die gemeenschappelijk zijn voor alle instructies die foutief zijn gedefinieerd. Onze aangepaste fout biedt nu deze CustomError.
We kunnen systeemreparaties voor elke fout overschrijven. Het voorbeeld NotVisibleError breidt CustomError uit. Zoals je kunt zien, overtreffen sommige mensen error_message.
Om aangepaste fouten op te lossen, hoef ik alleen de Error-client te behouden. We kunnen de uitdrukkelijke fout ook opslaan waar we deze opnieuw anders willen behandelen.
404 And Can 500
kan generieke uitzonderingen zoals 404 en 500 aan, hoewel dit puur door diefstal is voor de ontwikkelaar. We moeten daar een aparte controllerklasse maken om foutcontrole te ontvangen.
vertelt Rails om routes te gebruiken om uitzonderingen af te handelen. de regel die overeenkomt met application.rb.
config.Exceptions_app = Routes
bronnen nu terugdraaien voor # not_found fouten en 500 voor aantal internal_server_error fouten.
Slotopmerkingen
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
De modulaire aanpak is een Rails-cursus bovenop foutafhandeling. Wanneer we een bepaald foutbericht / formaat willen wijzigen, behouden we ons het recht voor om dat in onze beslissing te wijzigen. Met deze aanpak ontkoppelen we ook de belangrijkste installatielogica van foutafhandeling, waardoor de controllers stabiel in plaats van eigenwijs worden. Beste
geleiderails voor dunne controllers en modellen.
Dit is de complete software source marketeer voor foutafhandeling met een mooie modulaire aanpak. Klik op de knop “Aanbevelen” of iemand het nuttig vond of niet. En je kunt altijd antwoorden als je praktische twijfels hebt. Modulair bravo!
Benadering voor het verwijderen van obstakels op de sporen.
Versnel de prestaties van uw computer nu met deze eenvoudige download.