Middle+
Ruby on Rails'da so'rovlarni qayta ishlash sikli qanday ishlaydi?
sobes.tech AI
AIdan javob
- Veb server (masalan, Puma, Unicorn): Kiruvchi HTTP so’rovni qabul qiladi.
- Rack: Veb server va Rails ilovasi o’rtasidagi interfeys. Veb server so’rovni Rack obyekti (Rack muhit) ga o’rab, Rails ilovasiga uzatadi.
- Rails ilovasi: Rack interfeys ichida, Rails ilovasi so’rovni qayta ishlaydi. Asosiy bosqichlar:
- Middleware Stack: Turli vazifalarni bajaradigan oraliq dasturlar (middleware) to’plami, ular so’rovni qayta ishlashdan oldin va keyin bajariladi (masalan, marshrutlash, parametrlarni tahlil qilish, kechiktirish, sessiyalarni boshqarish).
- Router: URL va HTTP metodiga asoslanib, so’rovni qaysi controller va action qayta ishlashini aniqlaydi.
- Dispatcher: So’rovni topilgan controller va action ga yo’naltiradi.
- Controller: Biznes mantiqini bajaradi. Model bilan hamkorlik qilishi mumkin (ma’lumotlar bilan ishlash uchun) va ko’rsatmalarni render qilishi mumkin.
- Views: Ko’rsatmalar (shablonlar) HTML, JSON yoki boshqa javob formatlarini ishlab chiqaradi. ERB, Haml, Slim kabi shablon motorlaridan foydalanishi mumkin.
- Response: Controller javob obyekti yaratadi, u HTTP holati, sarlavhalar va javob matnini o’z ichiga oladi.
- Middleware Stack orqali qaytish: Javob obyekti yakuniy ishlov uchun middleware stack orqali qaytadi.
- Rack: Rails javob obyekti veb server uchun tushunarli formatga o’zgartiriladi.
- Veb server: Yaratilgan HTTP javobni mijozga yuboradi.
# Rails pseudokodida taxminiy oqim
module Rails
class Application
def call(env) # env - Rack muhit
# Middleware Stack (soddalashtirilgan)
# Rails::Rack::Logger.new.call(env) -> ... -> Rails::Rack::Failsafe.new.call(env)
# Marshrutlash
request = ActionDispatch::Request.new(env)
route = Rails.application.routes.recognize(request) # Mos keladigan marshrutni topadi
# Dispatch
controller_class = route[:controller].classify.constantize # Controller klassini oladi
controller_instance = controller_class.new
# Actionni bajarish
response = controller_instance.process(route[:action], request) # Controller action ni chaqiradi
# Middleware orqali qaytish
# ... (middleware orqali qaytish)
response.to_a # Javobni Rack formatiga aylantiradi [status, headers, body]
end
end
end