เมื่อคุณค้นคว้าวิธีปรับใช้แอป Rails ของคุณ คุณจะเห็นชื่อมากมาย:Apache, Unicorn, Puma, Phusion Passenger, Nginx, Rainbows และอีกมากมาย ดูเหมือนว่าพวกเขาทั้งหมดจะเข้ากันได้ดีภายใต้หมวดหมู่ซอฟต์แวร์ "การปรับใช้ Rails" แต่มีความแตกต่างที่สำคัญระหว่างพวกเขา บางตัวเป็น "เว็บเซิร์ฟเวอร์" และบางตัวเป็น "เซิร์ฟเวอร์แอป"
เมื่อคุณเข้าใจว่าประเภทใดและส่วนใดและส่วนใดที่เหมาะกับระบบของคุณ การปรับใช้จะเหมาะสมกว่ามาก แต่หมวดหมู่ไม่ชัดเจนเสมอไป
เว็บเซิร์ฟเวอร์คืออะไร และแตกต่างจากเซิร์ฟเวอร์แอปอย่างไร คุณสามารถใช้อันใดอันหนึ่งโดยไม่มีอันอื่นได้หรือไม่? แล้วแร็คจะพอดีกับตัวไหน?
เว็บเซิร์ฟเวอร์คืออะไร
A เว็บเซิร์ฟเวอร์ เป็นโปรแกรมที่รับคำขอไปยังเว็บไซต์ของคุณจากผู้ใช้และดำเนินการบางอย่างกับมัน จากนั้นอาจส่งคำขอไปยังแอป Rails ของคุณ Nginx และ Apache เป็นสองเว็บเซิร์ฟเวอร์ขนาดใหญ่ที่คุณจะเจอ
หากคำขอเป็นสิ่งที่ไม่เปลี่ยนแปลงบ่อย เช่น CSS, JavaScript หรือรูปภาพ แอป Rails ของคุณไม่จำเป็นต้องดู เว็บเซิร์ฟเวอร์สามารถจัดการคำขอได้เองโดยไม่ต้องพูดคุยกับแอปของคุณ โดยปกติแล้วจะเร็วกว่านั้น
เว็บเซิร์ฟเวอร์สามารถจัดการคำขอ SSL ให้บริการไฟล์และทรัพย์สินแบบคงที่ บีบอัดคำขอ และทำสิ่งอื่น ๆ มากมายที่เกือบทุกเว็บไซต์ต้องการ และถ้าแอป Rails ของคุณ ใช่ ต้องจัดการกับคำขอ เว็บเซิร์ฟเวอร์จะส่งต่อไปไปยังเซิร์ฟเวอร์แอปของคุณ
เซิร์ฟเวอร์แอปคืออะไร
เซิร์ฟเวอร์แอป คือสิ่งที่เรียกใช้แอป Rails ของคุณจริงๆ เซิร์ฟเวอร์แอปของคุณโหลดโค้ดและเก็บแอปไว้ในหน่วยความจำ เมื่อเซิร์ฟเวอร์แอปของคุณได้รับคำขอจากเว็บเซิร์ฟเวอร์ของคุณ เซิร์ฟเวอร์จะแจ้งแอป Rails ของคุณเกี่ยวกับเรื่องนี้ หลังจากที่แอปของคุณจัดการคำขอเสร็จแล้ว เซิร์ฟเวอร์แอปจะส่งการตอบกลับกลับไปยังเว็บเซิร์ฟเวอร์ (และในที่สุดก็ถึงผู้ใช้)
คุณสามารถเรียกใช้เซิร์ฟเวอร์แอปส่วนใหญ่ได้ด้วยตัวเองโดยไม่ต้องมีเว็บเซิร์ฟเวอร์อยู่ข้างหน้า นั่นอาจเป็นสิ่งที่คุณทำในโหมดการพัฒนา! แต่ในเวอร์ชันที่ใช้งานจริง คุณมักจะมีเว็บเซิร์ฟเวอร์อยู่ข้างหน้า จะจัดการหลายแอปพร้อมกัน ทำให้เนื้อหาของคุณเร็วขึ้น และจัดการกับการประมวลผลจำนวนมากที่คุณจะทำในทุกคำขอ
มี ตัน ของเซิร์ฟเวอร์แอปสำหรับแอป Rails รวมถึง Mongrel (ซึ่งไม่ได้ใช้แล้ว) Unicorn, Thin, Rainbows และ Puma แต่ละคนมีข้อดีและปรัชญาต่างกัน แต่ในท้ายที่สุด พวกเขาทั้งหมดทำสิ่งเดียวกันได้ ทำให้แอป Rails ของคุณทำงานและจัดการคำขอได้
แล้ว Passenger คืออะไร
Phusion Passenger มีเอกลักษณ์เฉพาะตัวเล็กน้อย ใน “โหมดสแตนด์อโลน” มันสามารถทำงานเหมือนกับเซิร์ฟเวอร์แอป แต่สามารถสร้างเว็บเซิร์ฟเวอร์ได้โดยตรง ดังนั้นคุณจึง ต้องการ เซิร์ฟเวอร์แอปแยกต่างหากเพื่อเรียกใช้แอป Rails ของคุณ
สะดวกจริงๆ โดยเฉพาะอย่างยิ่งหากคุณวางแผนที่จะเรียกใช้แอพจำนวนมากและไม่ต้องการใช้เวลาตั้งค่าเซิร์ฟเวอร์แอพสำหรับแต่ละแอพ หลังจากติดตั้ง Passenger คุณเพียงแค่ชี้เว็บเซิร์ฟเวอร์ไปที่แอป Rails โดยตรง (แทนที่จะเป็นเซิร์ฟเวอร์ของแอป) และแอป Rails ของคุณจะเริ่มจัดการคำขอ!
ผู้โดยสารเป็นตัวเลือกที่ดี แต่การมีเซิร์ฟเวอร์แอปแยกต่างหากก็ยังดีอยู่ การแยกเซิร์ฟเวอร์แอปออกจากกันช่วยให้คุณเลือกเซิร์ฟเวอร์แอปที่ตรงกับความต้องการของคุณได้อย่างยืดหยุ่น และคุณสามารถเรียกใช้และปรับขนาดได้ด้วยตัวเอง ถึงกระนั้น ฉันจะลองอีกครั้งในครั้งหน้าที่ฉันปรับใช้แอปขนาดเล็กใหม่ ฉันหวังว่าจะทำให้ปรับใช้แอปในอนาคตกับเซิร์ฟเวอร์เดียวกันได้ง่ายขึ้น
แล้วแร็คล่ะ
แร็คเป็นสิ่งมหัศจรรย์ที่ช่วยให้เซิร์ฟเวอร์แอปเหล่านี้เรียกใช้แอป Rails ของคุณได้ (หรือแอป Sinatra หรือแอป Padrino หรือ...)
คุณสามารถคิดว่า Rack เป็นภาษาทั่วไปที่เฟรมเวิร์กเว็บ Ruby (เช่น Rails) และเซิร์ฟเวอร์แอปต่างก็พูดกัน เนื่องจากแต่ละฝ่ายรู้ภาษาเดียวกัน หมายความว่า Rails สามารถพูดคุยกับ Unicorn และ Unicorn to Rails ได้โดยไม่ต้องให้ Rails หรือ Unicorn รู้อะไรเกี่ยวกับอีกฝ่ายเลย
เกี่ยวข้องกันอย่างไร
ทั้งหมดนี้เข้ากันได้อย่างไร?
จากชิ้นส่วนเหล่านี้ คำขอทางเว็บจะส่งถึงเว็บเซิร์ฟเวอร์ของคุณก่อน หากคำขอเป็นสิ่งที่ Rails สามารถจัดการได้ เว็บเซิร์ฟเวอร์จะทำการประมวลผลตามคำขอ และส่งต่อไปยังเซิร์ฟเวอร์แอป เซิร์ฟเวอร์แอปใช้ Rack เพื่อพูดคุยกับแอป Rails ของคุณ เมื่อแอปของคุณดำเนินการตามคำขอเสร็จสิ้น แอป Rails จะส่งการตอบกลับผ่านเซิร์ฟเวอร์แอปและเว็บเซิร์ฟเวอร์ไปยังผู้ที่ใช้แอปของคุณ
โดยเฉพาะอย่างยิ่ง Nginx อาจส่งคำขอไปยังยูนิคอร์น Unicorn ส่งคำขอไปยัง Rack ซึ่งมอบให้กับเราเตอร์ Rails ซึ่งมอบให้กับคอนโทรลเลอร์ที่ถูกต้อง จากนั้น คำตอบของคุณจะย้อนกลับไปในอีกทางหนึ่ง
ภาพรวมนี้อาจจะทำให้ง่ายขึ้น แต่การรู้หมวดหมู่เหล่านี้จะช่วยให้คุณนำซอฟต์แวร์ที่คุณพบมาไว้ในที่เก็บข้อมูลที่เหมาะสมได้
หลังจากที่คุณเข้าใจว่าเซิร์ฟเวอร์แอปและเว็บเซิร์ฟเวอร์เข้ากันได้อย่างไร คุณจะแก้ปัญหาเซิร์ฟเวอร์ได้ง่ายขึ้นเมื่อคุณมีปัญหา คุณจะทราบถึงสถานที่ต่างๆ ที่คุณสามารถมองได้ และวิธีที่พวกเขาโต้ตอบกัน และเมื่อเซิร์ฟเวอร์แอปที่น่าสนใจตัวต่อไปมาถึง คุณจะสลับใช้งานได้ง่ายขึ้น!
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่ Rails โต้ตอบกับเว็บ โปรดดูบทความนี้:เซสชันของ Rails ทำงานอย่างไร