Flera användare förklarade nyligen för oss att de har erfarenhet av en skräddarsydd Rails-felhanterare.
Godkänd: Fortect
Murphys lag:
Eftersom Murphy säger att lagen tillämpar allt som kan gå fel kommer att gå fel, varför är det så viktigt att sluta som förberett för det. Detta gäller överallt, även när det gäller mjukvaruutveckling. Applikationen vi utvecklar kan potentiellt vara tillräckligt robust för att hantera detta. Med andra ord måste det vara stabilt. Detta är konsekvent ämnet för detta blogginlägg. Om
saker kan gå fel är det troligtvis fel beslut.
-Murphys … Lag
I Rails, ett meningsfullt arbetsflöde, låt oss ta itu med fel i en tier -sats. Låt oss till exempel säga att du är ett API som använder Rails. Tänk på följande regulator som ett alternativ till att göra anpassad JSON.
Om ett lämpligt anpassat element hittas kommer det att återges i form av valfri Json, annars returnerar det ett specifikt json -fel . Detta är verkligen det typiska sättet om du vill skriva den nuvarande metoden i Rails. Men det är fångsten. Om användarregistrering inte börjar med, hoppar det inte till det andra problemet, utan visar istället innehållet i Fallback-500.html. Det var oväntat. Detta beror på det faktum attMen där en post inte visas uppstår ett verkligt RecordNotFound -fel. Samma sätt som find_by! eller någon Finder -metod med en träff.
Undantag! Slår på buggen
Innan vi ska kunna åtgärda buggarna måste vi förstå lite viktigt. Som du kan se från det större exemplet får vi ett ActiveRecord :: RecordNotFound -fel. Att försöka fånga en rubin kommer att läsa något sånt här, och det är okej.
Men om du vill undvika uteslutningar först är det verkligen viktigt på den aktuella marknaden att känna skillnaden mellan en undantag och till och med en Ruby -bugg. Rädda dig aldrig från undantag. Det syftar till att hantera varje undantag som växer upp från undantagsklassen individuellt och i slutändan minskar längden på utförandet.
I stället måste vi rädda oss själva med en StandardError. Här är en fördelaktig artikel på webbplatsen som förklarar konsekvenserna.Jag har alltid varit http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/.
Rescue
För att hantera verkliga problem kan vi använda kraschblockering. Återställningshindringen är samma som try..catch -blocket om du upptäcker att du är från Java -världen. Här är i stort sett samma kopia vid punkt a med ett stort reservblock.
Med detta tillvägagångssätt är dina fel genomsyrade av operatörens sätt och medel. Även om detta fungerar bra, är det definitivt inte det bästa sättet att felsöka. Här är några anledningar till ett bra alternativt tillvägagångssätt.
- Fat Läs den utmärkta Thoughtbots-artikeln https://robots.oughttbot.com/skinny-controllers- Skinny models.
- DRY-We-principen: det räcker med att kopiera stoppet av felet på olika punkter, vilket strider mot DRY (Don’t Repeat Yourself) -principen.
- Underhållbarhet: svårare att hantera kod. Ändrar typ av fel och formatet skulle innebära stora förändringar.
Ett återupptagningsbart tillvägagångssätt skulle vara ett mycket roterande felhanteringsblock för ApplicationController. Ett renare tillvägagångssätt är att skriva en otroligt bra felmodulhanterare.
Felhantering – En modulär metod
För att åtgärda layoutfel just nu är vårt första alternativ att flagga tillbaka det till ApplicationController. Men det är bättre att skilja någon av dem från affärslogiken.
Låt oss skapa din egen modul som hanterar fel globalt. Skapa den korrekta ErrorHandler-modulen (error_handler.rb) och placera den inuti lib / error (eller någonstans att ladda ner) och följaktligen aktivera vår ApplicationController.Load
Viktigt: den specifika felmodulen i programmet börjar verkligen med expansion i config – application.rb.
Obs! Jag använder flera för att hjälpa olika typer tillräckligt med skäl för json -utmatning. Kan du kolla upp det här?
Innan du kommer igång med att överväga någon error_handler -modul, här är ett intressant konto om moduler som du bör studera till fullo. Om du använder metoden “observera själv. Inkluderad” i en pålitlig modul, fungerar den associerade metoden som om programmet hade placerats i den ursprungliga klassen. Så vi har bara ErrorHandler -modulen, som verkligen finns i ApplicationController.
låt oss agera Låt oss inkludera ErrorModule till felhanteringsblocken. Det ser ut så här.
Om du ser ActiveRecord: RecordNotFound -fel är StandardError generellt ärftligt. Eftersom vi har en speciell fallback -arbetsprincip för detta får vi en komplett: record_not_found. StandardError -blocket fungerar som en enkel reservmetod som hanterar alla fel.
Definiera ditt eget undantag.
Vi kommer också att definiera vår egen felklass som kommer från StandardError. För att hålla saker enkla kommer vi förmodligen att skapa en ny CustomError -klass som innehåller framgångar och metoder som är gemensamma för alla samtal som definieras vid fel. Vårt anpassade fel sträcker nu ut denna CustomError.
Vi kan skriva över systemvägar för varje fel. NotVisibleError -exemplet utökar CustomError. Som du kan se kringgår vissa människor error_message.
För att åtgärda anpassade fel behöver konsumenterna bara göra felklientavlastningen. Vi kan också spara det felaktiga felet förutsatt att vi vill behandla det annorlunda igen.
404 Och kan 500
hantera generiska utelämnanden som 404 och 500, även om detta tillagas rent genom att stjäla för utvecklaren. Vi uppmanar till att skapa en separat styrklass där eftersom felkontroll.
uppmanar Rails att använda rutter till lösningsundantag. raden som motsvarar application.rb.
config.Exceptions_app = Rutter
utlöser nu återgång för # not_found fel och 500 för antal internal_server_error -fel.
Avslutande kommentarer
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
Den modulära metoden är en Rails -kurs helt och hållet om felhantering. Närhelst vi vill ändra ett exakt felmeddelande / format förbehåller vi oss rätten att ändra det i vårt beslut. Fram till detta tillvägagångssätt kopplar vi också bort den viktigaste förfrågningslogiken från felhantering, vilket gör kontrollerna enkla snarare än kaxiga. Bästa
disciplinskenor för tunna styrenheter och modeller.
Detta är den fullständiga mjukvarukällssignalen för felhantering med varje modulärt tillvägagångssätt. Klicka på knappen “Rekommendera” om någon tyckte att det var till hjälp. Och du kan ofta svara om du har några praktiska tvivel. Modulär bravo!
Tillvägagångssätt för att ta bort hinder på spåren.
Snabba upp din dators prestanda nu med denna enkla nedladdning.