סביבת זמן הריצה של Ruby מאפשרת להריץ את האפליקציה ב-App Engine בסביבת ארגז חול. במאמר הזה מוסבר על סביבת זמן הריצה של Ruby, כולל אילו כותרות מסופקות לקוד ומידע נוסף שיעזור לכם לפרוס את האפליקציה ב-App Engine.
מציינים את זמן הריצה של Ruby ל-App Engine בסביבה הרגילה בקובץ app.yaml:
runtime: rubyVERSION
VERSION הוא מספר הגרסה של Ruby MAJOR ו-MINOR. לדוגמה, כדי להשתמש בגרסת Ruby האחרונה, Ruby 4.0, מציינים 40.
למידע על גרסאות נתמכות אחרות של Ruby ועל גרסת Ubuntu התואמת לגרסת Ruby שלכם, אפשר לעיין בלוח הזמנים של התמיכה בזמן ריצה.
גרסת Ruby
הגרסה העדכנית ביותר של Ruby שנתמכת היא 4.0. סביבת זמן הריצה של Ruby משתמשת בגרסה היציבה העדכנית ביותר שצוינה בקובץ app.yaml. App Engine מעדכן אוטומטית לגרסאות חדשות של תיקוני אבטחה, אבל הוא לא מעדכן אוטומטית את הגרסה המשנית.
לדוגמה, יכול להיות שהאפליקציה שלכם תופעל ב-Ruby 2.6.0 ותעודכן אוטומטית לגרסה 2.6.1 בהפעלה מאוחרת יותר, אבל היא לא תעודכן אוטומטית ל-Ruby 2.7.
תלויות
מידע נוסף על הצהרה על יחסי תלות וניהול שלהם זמין במאמר Specifying dependencies.
הפעלת האפליקציה
סביבת זמן הריצה מפעילה את האפליקציה באמצעות entrypoint שמוגדר ב-app.yaml. נקודת הכניסה צריכה להתחיל תהליך שמגיב לבקשות HTTP ביציאה שמוגדרת על ידי משתנה הסביבה PORT.
לדוגמה:
entrypoint: bundle exec rails server -p $PORT
רוב אפליקציות האינטרנט משתמשות בשרת אינטרנט שתומך ב-Rack, כמו Puma, Unicorn או Thin.
צריך להוסיף את השרת כתלות בקובץ ההגדרות Gemfile של האפליקציה. סביבת זמן הריצה תתקין את כל התלויות לפני הקריאה לנקודת הכניסה.
source "https://rubygems.org"
gem "rack"
gem "puma"
דוגמה לנקודת כניסה באמצעות puma לאפליקציית Rails:
entrypoint: bundle exec rails server Puma -p $PORT
דוגמה לנקודת כניסה באמצעות puma לכל אפליקציית Rack:
entrypoint: bundle exec rackup -s Puma -p $PORT
באפליקציות שיכולות לטפל בבקשות בלי שרת Rack, אפשר פשוט להריץ סקריפט Ruby:
entrypoint: bundle exec ruby app.rb
$PORT יוחלפו כרגיל, אבל תחביר Shell כמו if, for ו-while שמוטמע בפקודה entrypoint לא יפעל.
משתני סביבה
משתני הסביבה הבאים מוגדרים על ידי זמן הריצה:
| משתנה הסביבה | תיאור |
|---|---|
GAE_APPLICATION
|
המזהה של אפליקציית App Engine. המזהה הזה מתחיל בקידומת region code~, למשל e~ לאפליקציות שמוצבות באירופה. |
GAE_DEPLOYMENT_ID |
המזהה של הפריסה הנוכחית. |
GAE_ENV |
סביבת App Engine. ההגדרה היא standard. |
GAE_INSTANCE |
המזהה של המופע שבו השירות שלכם פועל כרגע. |
GAE_MEMORY_MB |
נפח הזיכרון שזמין לתהליך האפליקציה, ב-MB. |
GAE_RUNTIME |
סביבת זמן הריצה שצוינה בקובץ app.yaml. |
GAE_SERVICE |
שם השירות שצוין בקובץ app.yaml. אם לא מציינים שם שירות, ברירת המחדל היא default. |
GAE_VERSION |
תווית הגרסה הנוכחית של השירות. |
GOOGLE_CLOUD_PROJECT |
מזהה הפרויקט ב- Google Cloud שמשויך לאפליקציה. |
PORT |
היציאה שמקבלת בקשות HTTP. |
NODE_ENV (זמין רק בסביבת זמן ריצה של Node.js) |
מגדירים את הערך production כשהשירות נפרס. |
אפשר להגדיר משתני סביבה נוספים בקובץ app.yaml, אבל אי אפשר לשנות את הערכים שלמעלה, למעט NODE_ENV.
פרוטוקול HTTPS ושרתי proxy להעברה
App Engine מסיימת חיבורי HTTPS במאזן העומסים ומעבירה בקשות לאפליקציה. יש אפליקציות שצריכות לקבוע את כתובת ה-IP והפרוטוקול של הבקשה המקורית. כתובת ה-IP של המשתמש זמינה בכותרת הרגילה X-Forwarded-For. אפליקציות שזקוקות למידע הזה צריכות להגדיר את תוכנת ה-framework שלהן כך שתיתן אמון בשרת ה-proxy.
מערכת קבצים
סביבת זמן הריצה כוללת ספרייה /tmp עם הרשאת כתיבה, ולכל שאר הספריות יש הרשאת קריאה בלבד. כתיבה ל-/tmp תופסת זיכרון מערכת. מידע נוסף זמין במאמרי העזרה בנושא TempDir וTempFile.
שרת מטא-נתונים
כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של App Engine כדי לשלוח שאילתות לגבי המופע והפרויקט.
אפשר לגשת לשרת המטא-נתונים דרך נקודות הקצה הבאות:
http://metadatahttp://metadata.google.internal
בקשות שנשלחות לשרת המטא-נתונים צריכות לכלול את כותרת הבקשה Metadata-Flavor: Google. הכותרת הזו מציינת שהבקשה נשלחה בכוונה מפורשת לאחזר ערכי מטא-נתונים.
בטבלה הבאה מפורטות נקודות הקצה שאליהן אפשר לשלוח בקשות HTTP למטא-נתונים ספציפיים:
| נקודת קצה של מטא-נתונים | תיאור |
|---|---|
/computeMetadata/v1/project/numeric-project-id |
מספר הפרויקט שהוקצה לפרויקט שלכם. |
/computeMetadata/v1/project/project-id |
מזהה הפרויקט שהוקצה לפרויקט שלכם. |
/computeMetadata/v1/instance/region |
האזור שבו המופע פועל. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
כתובת האימייל בחשבון השירות שמוגדר כברירת מחדל ומוקצה לפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/ |
מציגה את כל חשבונות השירות שמוגדרים כברירת מחדל בפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
רשימה של כל ההיקפים הנתמכים בחשבונות שירות שמוגדרים כברירת מחדל. |
/computeMetadata/v1/instance/service-accounts/default/token |
מחזירה את אסימון האימות שאפשר להשתמש בו כדי לאמת את האפליקציה שלכם ב-Google Cloud APIs אחרים. |
לדוגמה, כדי לאחזר את מזהה הפרויקט, שולחים בקשה אל http://metadata.google.internal/computeMetadata/v1/project/project-id.