Middle+
Kako funkcioniše ciklus obrade zahteva u Ruby on Rails?
sobes.tech АИ
Одговор од АИ
- Veb server (na primer, Puma, Unicorn): Prima dolazni HTTP zahtev.
- Rack: Interfejs između veb servera i Rails aplikacije. Veb server obavija zahtev u Rack objekat (okruženje Rack), koji se prosleđuje Rails aplikaciji.
- Rails aplikacija: Unutar Rack okruženja, Rails aplikacija obrađuje zahtev. Glavni koraci:
- Middleware stek: Skup međuprograma (middleware) koji obavljaju razne zadatke pre i posle obrade zahteva (npr. rutiranje, analiza parametara, keširanje, upravljanje sesijama).
- Router: Određuje koji kontroler i akcija treba da obrade zahtev na osnovu URL-a i HTTP metode.
- Dispečer: Usmerava zahtev do pronađenog kontrolera i akcije.
- Kontroler: Izvršava poslovnu logiku. Može da komunicira sa modelima (za rad sa podacima) i da renderuje prikaze.
- Prikazi: Prikazi (šabloni) generišu HTML, JSON ili druge formate odgovora. Mogu koristiti šablonske motore (ERB, Haml, Slim).
- Odgovor: Kontroler kreira objekat odgovora koji uključuje HTTP status, zaglavlja i telo odgovora.
- Povratak kroz Middleware stek: Objekat odgovora prolazi nazad kroz middleware stek do završne obrade.
- Rack: Pretvara objekat odgovora Rails u format razumljiv veb serveru.
- Veb server: Šalje formirani HTTP odgovor klijentu.
# Aproksimativni tok u pseudokodu Rails
module Rails
class Application
def call(env) # env - Rack okruženje
# Middleware stek (pojednostavljeno)
# Rails::Rack::Logger.new.call(env) -> ... -> Rails::Rack::Failsafe.new.call(env)
# Rutiranje
request = ActionDispatch::Request.new(env)
route = Rails.application.routes.recognize(request) # Pronalazi odgovarajući put
# Dispečovanje
controller_class = route[:controller].classify.constantize # Dobija klasu kontrolera
controller_instance = controller_class.new
# Izvršavanje akcije
response = controller_instance.process(route[:action], request) # Poziva akciju kontrolera
# Povratak kroz Middleware
# ... (nazad kroz middleware)
response.to_a # Pretvara odgovor u Rack format [status, headers, body]
end
end
end