Middle+
Ruby on Rails-də sorğu emalı dövrü necə işləyir?
sobes.tech Süni İntellekt
AI-dan cavab
- Veb server (məsələn, Puma, Unicorn): Gələn HTTP sorğusunu qəbul edir.
- Rack: Veb server və Rails tətbiqi arasında interfeysdir. Veb server sorğunu Rack obyekti (Rack mühiti) daxilində sarıyır və Rails tətbiqinə ötürür.
- Rails Tətbiqi: Rack interfeysində, Rails tətbiqi sorğunu emal edir. Əsas mərhələlər:
- Middleware Stack: Müxtəlif tapşırıqları yerinə yetirən aralıq proqramlar (middleware), sorğunun işlənməsindən əvvəl və sonra (məsələn, marşrutlaşdırma, parametrlərin təhlili, keşik, sessiyaların idarə olunması).
- Router: URL və HTTP metoduna əsaslanaraq, sorğunu hansı controller və əməliyyatın emal edəcəyini müəyyən edir.
- Dispatcher: Sorğunu tapılmış controller və əməliyyətə yönəldir.
- Controller: Biznes məntiqini yerinə yetirir. Məlumatlar ilə işləmək üçün modellərlə qarşılıqlı əlaqə qura bilər və görünüşləri render edə bilər.
- Views: Görünüşlər (şablonlar) HTML, JSON və ya digər cavab formatlarını yaradır. ERB, Haml, Slim kimi şablon mühərriklərindən istifadə edə bilər.
- Response: Controller cavab obyektini yaradır, o, HTTP statusu, başlıqlar və cavabın gövdəsini əhatə edir.
- Middleware Stack vasitəsilə geri dönüş: Cavab obyekti, son işləmə üçün middleware stack vasitəsilə geri keçir.
- Rack: Rails cavab obyektini veb server üçün başa düşülən formata çevirir.
- Veb server: Yaradılmış HTTP cavabını müştəriyə göndərir.
# Rails pseudokodunda təxmini axın
module Rails
class Application
def call(env) # env - Rack mühiti
# Middleware Stack (sadələşdirilmiş)
# Rails::Rack::Logger.new.call(env) -> ... -> Rails::Rack::Failsafe.new.call(env)
# Routing
request = ActionDispatch::Request.new(env)
route = Rails.application.routes.recognize(request) # Uyğun marşrutu tapır
# Dispatch
controller_class = route[:controller].classify.constantize # Controller sinfini alır
controller_instance = controller_class.new
# Əməliyyatın yerinə yetirilməsi
response = controller_instance.process(route[:action], request) # Controller əməliyyatını çağırır
# Middleware vasitəsilə geri dönüş
# ... (middleware vasitəsilə geri dönüş)
response.to_a # Cavabı Rack formatına çevirir [status, headers, body]
end
end
end