lighttpd ו eruby

שפת רובי מוכרת בעיקר בזכות ה framework (או בסיס פיתוח בעברית ?) שנקרא rails (או מסילות בעברית ע"ע פוסט קודם). היתרון של מסילות הוא הגימורים שמאפשרים להתרכז רק בעשייה של האתר/אפליקציה עצמה שצריך לבצע ללא התעסקות בהרבה דברים מסביב. הבעיה היא עקומת הלימוד הגבוהה שיש לסביבה הזו. היא כל הזמן מתפתחת בעיקר לטובה, וכל שינוי דורש לימוד מחודש שלו.

במידה ואנחנו רוצים לבנות אתר בשפת רובי ללא מסילות, אנחנו נשתמש במנוע שנקרא eruby. המנוע הזה הוא מנוע שיודע לדבר רובי בשבילנו, ו HTTP ו CGI עם השרת ובכך אנחנו מגיעים למצב שבו אנחנו יכולים לכתוב את האתר הדינאמי שלנו ללא כאב ראש מסויים בהתממשקות אל מול שרת HTTP אשר אינו בנוי לתמוך בשפת רובי.

לאחרונה התחלתי ללמוד לעבוד עם lighttpd, אשר למי שאינו מכיר, זהו שרת http בקוד פתוח שבניגוד לאפצ'י, הוא קל יותר ופשוט יותר לעבודה (כאשר יודעים לעבוד איתו). ולכן כל עוד אנחנו זקוקים לאתר אינטרנט ללא יותר מידי דברים מסביב, הוא בד"כ עדיף מאשר אפצ'י הכבד.

בכל מקרה, אני מנסה לכתוב תסריט cgi באמצעות רובי, שהוא כאמור ללא שימוש במסילות. ולכן ניסיתי להגדיר את eruby ב lighttpd. זה היה מאוד פשוט, בסה"כ צריך להגדיר את השורה:

cgi.assign = ( ".rhtml" => "/usr/bin/eruby" )

ויש לנו (אחרי שאנחנו מפעילים את mod_cgi) תמיכה ב eruby.

עכשיו התחילה לי בעיה. יצרתי דף html נקי עם סיומת rhtml (הסיומת של eruby שקבענו) והכנסתי לה עברית בכותרת ועשיתי ל lighttpd רענון קל בשביל שיקבל את כל השינויים (אחרי שיצרתי גם virtual host מן הסתם). טענתי את הדף, וקיבלתי ג'יבריש.

ניתוח מאוד מהיר עם firebug, העלה שה header של התוכן html שלנו נשלח אלינו בתור iso-8859-1 ולא בתור utf-8. התחלתי לחפש מידע על זה בגוגל. אחרי שעה לא הצלחתי למצוא שום דבר ישיר לכיוון של השרת. אח"כ התחלתי לחפש אם יש mod ספציפי שצריך בשביך להגדיר את  ה header (ראש) ומצאתי את ה mod שנקרא mod_setenv הגדרתי טעינה שלו, הגדרתי את הראש המתאים לפי התיעוד. הרצתי מחדש את lighttpd ו… עדיין הוא מתעלם ממני ! עכשיו התחלתי ליצור קצת קוד רובי אשר יוצר את המחלקה CGI ולשלוח את ה header בעצמי. ובכן זה לא רק שלא עבד, אלא פעם אחת הוא שלח header ריק ופעם שנייה את התוכן עם header המקורי (באותה הבקשה).

אחרי עוד כמה שעות של ניסויים וחיפושים בגוגל, החלטתי להתחיל לקרוא יותר על כל הרכיבים שאני מריץ ב lighttpd והגעתי למצב ששום דבר לא דיבר על charset. וגם הגדרה של

mimetype.assign = (".html" => "text/html; charset=utf-8")

לא עזרה.  בסוף החלטתי לבדוק את eruby, אולי אני מפספס משהו. ובכן דף התיעוד של eruby אכן עזר לי הרבה. יש בו אפשרות להגדיר גם את קוד הדף להשתמש בו וגם את ה charset שצריך. ניסיתי להעביר את הפרמטרים הנדרשים לשורה של cgi.assign ו lighttpd ממש לא אהב את הפרמטרים.

חיפוש קל בגוגל העלה את הבלוג הבא: http://presidentbeef.com/blog/lighttpd . הבלוג מדבר על אותה בעיה שאני נתקלתי בה, ואותו אדם יצר סקריפט רובי. לקחתי את הסקריפט (נדרש שינוי קל בראש של הסקריפט) והשתמשתי בו. וגרמתי כמובן ל lighttpd להריץ את הסקריפט במקום eruby בצורה ישירה, ועכשיו הכל עובד כמו שצריך.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s