Det finns mycket prat om Rack, men om du inte själv är en ramförfattare så ser du sällan det. Så vad är Rack? Och varför du som applikationsutvecklare ska du bry dig om det?
Rack är ett slags mellanprogram. Det ligger mellan din webbapplikation och webbservern. Den hanterar alla serverspecifika API-samtal, vidarebefordrar HTTP-begäran och alla miljöparametrar i en hash och ger din applikations svar tillbaka till servern. Med andra ord, din applikation behöver inte veta hur man pratar med en HTTP-server, den behöver veta hur man pratar med Rack.
Detta har ett antal fördelar. Först är det enkelt att prata med Rack (som du ser nedan). För det andra, eftersom du bara behöver veta hur du pratar med Rack och Rack vet hur man pratar med många olika HTTP-servrar kommer din applikation att köras på någon av dessa HTTP-servrar. Rack är som en universaladapter för webbapplikationer.
Själva Rack-applikationerna är inget speciellt. I själva verket är Rack API så död enkelt, det kan beskrivas i en enda mening:
En Rack-applikation är alla Ruby-objekt som svarar på ring upp metod, tar en enda hash-parameter och returnerar en matris som innehåller svarstatuskoden, HTTP-svarhuvuden och svarskroppen som en rad strängar.
Det är ganska mycket det. Det låter för enkelt för att vara sant, eller åtminstone för enkelt för att vara användbart, men när det verkligen kommer till det är det allt du verkligen gör när du pratar med HTTP-servrar.
Men vidare till den verkliga frågan: Varför ska du som applikationsprogrammerare bryr dig om Rack? Tja först, det finns alltid upplysning i att förstå hur ditt ramverk fungerar. Men ännu viktigare, det finns användbara saker du kan göra med Rack. Viktigast av allt: mellanprogram.
Det här låter lite konstigt. Men ett extra lager mellan din applikation och Rack kan vara bra, och implementera funktioner som bara skulle göra din applikation rörig. Vad den här mellanprogramvaran gör är att helt enkelt ta förfrågan från Rack, skicka den till din applikation, få svaret, lägga till något i det eller filtrera det eller något längs dessa linjer och sedan skicka svaret tillbaka till Rack. Detta kan användas för att implementera mycket intressanta små funktioner som en server-agnostisk logger, eller en begäran sanity checker, eller lite mellanprogram som skickar e-post till en administratör varje gång din ansökan kommer tillbaka med en 404. Ingen av dessa funktioner behöver röra upp din applikationen kan de implementeras som mellanprogram med Rack.