כאשר עובדים עם HTTP דינמי, ישנם כמה דרכים לבצע את אותם המשימות.
דרך ראשונה היא ליישם את CGI (או את FastCGI או את scgi וכו'), דרך שנייה היא לספק כלים טבעיים בשפת התכנות לעשות את אותו הדבר בדיוק. גם רובי וגם פיתון מספקים כלים טבעיים בשפה בשביל לדבר ב HTTP.
ברובי יש לנו את הכלי שנקרא Rack.
הדוגמא הפשוטה ביותר לעבוד איתו היא בצורה הבאה:
class HelloWorld def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello world!"]] end end כאשר נקרא למתודה call יודפס לנו הראש של HTTP והתוכן של Hello World מייד אחריו. אבל זוהי דוגמא מופשטת מאוד.
הרעיון של Rack (וכלים אחרים בסגנון) הוא בכך שאנחנו מנהלים בעצם את האפליקציות/שרתי HTTP שלנו תחת קורת גג אחת, ובכך אפשר לקחת כמה תוכנות שונות שיודעות לדבר עם Rack (וכלים אחרים בסגנון) ולגרום להם להיות אפליקציה אחת בעצם אשר ניתן להרחיב ולשנות את התכונות בהתאם לצורך ולריצה שמתרחשת באותו הזמן.
הרעיון של rack הוא לא שתתכנתו בו, אלא יותר ש frameworks ישתמשו בו, ולכן הוא מספק בעצם כלים לשרתי HTTP שבייחד עם תוכנות/קוד/כלי תיווך (middleware – יש מילה טובה יותר בעברית ?) יספקו מענה לשרת בשביל לעבוד על ה framework.
בין השרתים שמשתמשים ב Rack ניתן למצוא את:
- Ebb
- Fuzed
- Phusion Passenger
ניתן גם למצוא כמה שרתים/כלים אשר מספקים תמיכה לספרייה:
- Mongrel
- EventedMongrel
- SwiftipliedMongrel
- WEBrick
- FCGI
- CGI
- SCGI
- LiteSpeed
- Thin
החל מגרסה 2.3x של rails, כל השירותים מבוססי rails (כלומר לא תוספות) עברו להשתמש בכלי הזה.
פינגבק: Rails 2.3 « לראות שונה