Sobes.tech
Middle+

Kā darbojas pieprasījumu apstrādes cikls Ruby on Rails?

sobes.tech AI

Atbilde no AI

  1. Tīmekļa serveris (piemēram, Puma, Unicorn): Pieņem ienākošo HTTP pieprasījumu.
  2. 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.
  3. 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.
  4. Atgriešanās caur Middleware Stack: Atbildes objekts atgriežas atpakaļ caur middleware steku galīgai apstrādei.
  5. Rack: Pārvērš Rails atbildes objektu formātā, ko saprot tīmekļa serveris.
  6. 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