homeASCIIcasts

281: Foreman 

(view original Railscast)

Other translations: En Ja Es

Other formats:

Written by Meron Bareket

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

לדוגמא, כדי להשתמש באפליקציית GoVsGo של ריאן בסביבת פיתוח, יש לפתוח מספר תהליכי רקע מבעוד מועד. תהליכים אלה כוללים לדוגמא את Beanstalkd, script/worker וכמו כן גם תהליך שרת של אפליקציית Faye. יש לאתחל כל אחד מהתהליכים הללו בכל פעם בה רוצים להשתמש ב-GoVsGo בסביבת הפיתוח. כאן נכנס פורמן לתמונה, ומאפשר לנו לנהל בצורה פשוטה את כל תהליכי הרקע הללו.

התקנה ושימוש ב-פורמן

פורמן מסופק לנו כג'ם ומותקן בדרך הרגילה והמקובלת.

$ gem install foreman

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

/Procfile

beanstalk:  beanstalkd
worker:     ./script/worker
faye:       rackup faye.ru -s thin -E production

לאחר שיצרנו את קובץ ה-Procfile, אנו יכולים לבדוק את תקינותו על ידי הרצת הפקודהforeman check.

$ foreman check
valid procfile detected (beanstalk, worker, faye)

אם השתמשתם בטאב, במקום ברווח, על מנת להפריד את השמות מהפקודות בקובץ ההגדרה, תתקבל הודעה המזהירה מפני הפסקת התמיכה בפורמט זה. יש לקחת זאת בחשבון כאשר עורכים את קובץ ה-Procfile. אם לאחר הרצת הפקודה אנו מקבלים חיווי כי הקובץ תקין, נוכל לנסות להריץ את פורמן על ידי הפקודה foreman start.

$ foreman start
20:06:35 beanstalk.1  | started with pid 23140
20:06:35 worker.1     | started with pid 23141
20:06:35 faye.1       | started with pid 23143
20:06:36 faye.1       | >> Thin web server (v1.2.11 codename Bat-Shit Crazy)
20:06:36 faye.1       | >> Maximum connections set to 1024
20:06:36 faye.1       | >> Listening on 0.0.0.0:9292, CTRL+C to stop
20:06:38 worker.1     | [2011-08-29 20:06:38 +0100] Working 1 jobs: [ Game.move ]

כאשר נריץ את הפקודה, כל אחד מהתהליכים שהגדרנו בקובץ Procfile יורץ ויירשם יחד עם הפלט שלו בחלון המסוף. אם נלחץ קונטרול+C בחלון המסוף, כל אחד מהתהליכים יופסק.

לפורמן יש מדריך שימושי, המתעד את הפרמטרים שניתן להעביר לו וכן כמה מתכונותיו הנוספות, אותן נסקור כעת. לדוגמא, אם נרצה להריץ רק תהליך אחד מתוך התהליכים שהוגדרו בקובץ ;Procfile, כל שעלינו לעשות הוא לקרוא לפורמן יחד עם השם שהגדרו, לדוגמא:

.
$ foreman start faye
20:35:41 faye.1       | started with pid 23322
20:35:41 faye.1       | >> Thin web server (v1.2.11 codename Bat-Shit Crazy)
20:35:41 faye.1       | >> Maximum connections set to 1024
20:35:41 faye.1       | >> Listening on 0.0.0.0:9292, CTRL+C to stop

אם נרצה להריץ מספר עותקים שונים של תהליכי רקע, נוכל לעשות זאת באמצעות העברת הפרמטר -c. לדוגמא, נוכל לאתחל 4 מופעים של worker על ידי הרצת הפקודה foreman start -c worker=4.

$ foreman start -c worker=4
20:39:41 beanstalk.1  | started with pid 23366
20:39:41 worker.1     | started with pid 23368
20:39:41 worker.2     | started with pid 23370
20:39:41 worker.3     | started with pid 23372
20:39:41 worker.4     | started with pid 23374
20:39:41 faye.1       | started with pid 23376
20:39:42 faye.1       | >> Thin web server (v1.2.11 codename Bat-Shit Crazy)
20:39:42 faye.1       | >> Maximum connections set to 1024
20:39:42 faye.1       | >> Listening on 0.0.0.0:9292, CTRL+C to stop
20:39:46 worker.3     | [2011-08-29 20:39:46 +0100] Working 1 jobs: [ Game.move ]
20:39:46 worker.1     | [2011-08-29 20:39:46 +0100] Working 1 jobs: [ Game.move ]
20:39:46 worker.2     | [2011-08-29 20:39:46 +0100] Working 1 jobs: [ Game.move ]
20:39:47 worker.4     | [2011-08-29 20:39:47 +0100] Working 1 jobs: [ Game.move ]

הפקודה תגרום לפתיחת כל התהליכים פעם יחידה, פרט ל-worker אשר ייפתח ב-4 מופעים שונים.

ייצוא תהליכים

לפורמן יכולת לייצא את התהליכים בפורמט שניתן להשתמש בו בשרת בסביבת הייצור. נכון להיום הפורמטים הנתמכים הם inittab ו-upstart. אם נריץ את הפקודה foreman export upstart . פורמן ייצור מספר קבצי הגדרות בפורמט upstart בתוך התיקייה הנוכחית. אם נבחן אחד מהן, נראה שהוא מריץ פקודה להתחלת תהליך של beanstalkd וטיפול בלוגים.

/govsgo-beanstalk-1.conf

start on starting govsgo-beanstalk
stop on stopping govsgo-beanstalk
respawn

exec su - govsgo -c 'cd /Users/eifion/govsgo; export PORT=5000; beanstalkd >> /var/log/govsgo/beanstalk-1.log 2>&1'

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