Middle+
Kā darbojas pieprasījumu apstrādes cikls Ruby on Rails?
sobes.tech AI
Atbilde no AI
- Tīmekļa serveris (piemēram, Puma, Unicorn): Pieņem ienākošo HTTP pieprasījumu.
- Rack: Saskarne starp tīmekļa serveri un Rails lietojumprogrammu. Tīmekļa serveris iepako pieprasījumu Rack objektā (Rack vide), kas tiek nodots Rails lietojumprogrammai.
- Rails lietojumprogramma: iekšā Rack saskarnē Rails lietojumprogramma apstrādā pieprasījumu. Galvenie posmi:
- Middleware Stack: Starpnieku programmu kopums, kas veic dažādus uzdevumus pirms un pēc pieprasījuma apstrādes (piemēram, maršrutēšana, parametru analīze, kešatmiņas, sesiju pārvaldība).
- Router: Nosaka, kurš kontrolieris un darbība apstrādās pieprasījumu pēc URL un HTTP metodes.
- Dispatcher: Nosūta pieprasījumu atrastajam kontrolierim un darbībai.
- Controller: Veic biznesa loģiku. Var sadarboties ar modeļiem (datu apstrādei) un ģenerēt skatus.
- Views: Skati (šabloni) ģenerē HTML, JSON vai citus atbildes formātus. Var izmantot šablonu sistēmas (ERB, Haml, Slim).
- Response: Kontrolieris veido atbildes objektu, kas ietver HTTP statusu, galvenes un atbildes ķermeni.
- Atgriešanās caur Middleware Stack: Atbildes objekts atgriežas atpakaļ caur middleware steku galīgai apstrādei.
- Rack: Pārvērš Rails atbildes objektu formātā, ko saprot tīmekļa serveris.
- Tīmekļa serveris: Nosūta izveidoto HTTP atbildi klientam.
# Aptuvenais plūsmas Rails pseido-kodā
module Rails
class Application
def call(env) # env - tas ir Rack vide
# Middleware steks (vienkāršots)
# Rails::Rack::Logger.new.call(env) -> ... -> Rails::Rack::Failsafe.new.call(env)
# Maršrutēšana
request = ActionDispatch::Request.new(env)
route = Rails.application.routes.recognize(request) # Atrod atbilstošo maršrutu
# Dīspetčēšana
controller_class = route[:controller].classify.constantize # Saņem kontroliera klasi
controller_instance = controller_class.new
# Darbības izpilde
response = controller_instance.process(route[:action], request) # Izsauc kontroliera darbību
# Atgriešanās caur Middleware
# ... (atgriešanās caur middleware)
response.to_a # Pārvērš atbildi Rack formātā [statuss, galvenes, ķermenis]
end
end
end