זמן הריצה של Ruby הוא מחסנית התוכנה שאחראית להתקנת קוד האפליקציה והתלות שלה, ולאחר מכן להפעלת האפליקציה בסביבה הגמישה.
גרסאות Ruby
Ruby 4.0 (גרסת Preview) משתמש בbuildpacks. רשימה מלאה של גרסאות Ruby הנתמכות וגרסאות Ubuntu התואמות שלהן זמינה בלוח הזמנים של התמיכה בזמן ריצה.
כדי להשתמש בגרסת Ruby נתמכת, צריך:
מציינים גרסת Ruby בקובץ
Gemfile.RUBY VERSION ruby "4.0.x"מתקינים את גרסה 420.0.0 ואילך של ה-CLI של gcloud. אפשר לעדכן את כלי ה-CLI על ידי הרצת הפקודה
gcloud components update. כדי לראות את הגרסה המותקנת, אפשר להריץ את הפקודהgcloud version.מציינים את ההגדרה
operating_systemבקובץapp.yaml:runtime: ruby env: flex runtime_config: operating_system: "ubuntu24"אפשר גם לציין גרסה של מתורגמן Ruby באמצעות קובץ
.ruby-versionבתיקיית האפליקציה. לדוגמה,4.0.x.
גרסאות קודמות
כדי להשתמש ב-Ruby runtime בגרסה 3.1 ומגרסאות קודמות, צריך לציין גרסה של Ruby interpreter באמצעות קובץ .ruby-version בספריית האפליקציה.
אם הקובץ הזה קיים, סביבת זמן הריצה מתקינה את הגרסה המבוקשת של Ruby כשפורסים את האפליקציה באמצעות rbenv. אם אי אפשר להתקין את הגרסה המבוקשת, App Engine מציג הודעת שגיאה במהלך הפריסה.
אם לא מספקים קובץ .ruby-version, סביבת זמן הריצה של Ruby מוגדרת כברירת מחדל לגרסה 2.7. שימו לב: ברירת המחדל יכולה להשתנות בכל שלב, ולכן מומלץ לציין באפליקציה גרסת Ruby.
תמיכה בסביבות זמן ריצה אחרות של Ruby
אם אתם צריכים להשתמש בגרסת Ruby שלא נתמכת, אתם יכולים ליצור סביבת ריצה בהתאמה אישית ולבחור תמונת בסיס תקינה עם גרסת Ruby שאתם צריכים.
לגבי תמונות בסיס שסופקו על ידי Google או תמונות בסיס של Docker Ruby, אפשר לעיין במאמר יצירת סביבות ריצה בהתאמה אישית.
תלויות
סביבת זמן הריצה מחפשת קובץ Gemfile בספריית קובצי המקור של האפליקציה ומשתמשת ב-Bundler כדי להתקין את כל התלות לפני הפעלת האפליקציה. מידע נוסף על הצהרה על חבילות וניהול שלהן זמין במאמר שימוש בספריות Ruby.
שימוש בספריות C עם Ruby
בספריות Ruby שדורשות תוספי C, הכותרות של גרסת Ruby הנוכחית ושל חבילות Ubuntu הבאות מותקנות מראש במערכת.
autoconfbuild-essentialca-certificatescmakecurlfilegitimagemagicklibcurl3libcurl3-gnutlslibcurl4-openssl-devlibffi-devlibgdbm-devlibgit2-devlibgmp-devlibicu-devlibjemalloc-devlibjemalloc1libmagickwand-devlibmysqlclient-devlibncurses5-devlibpq-devlibqdbm-devlibreadline6-devlibsqlite3-devlibssl-devlibxml2-devlibxslt-devlibyaml-devlibz-devsystemtaptzdata
החבילות האלה מאפשרות להתקין את רוב ספריות Ruby הפופולריות. אם האפליקציה שלכם דורשת תלות נוספת ברמת מערכת ההפעלה, תצטרכו להשתמש בסביבת זמן ריצה בהתאמה אישית שמבוססת על סביבת זמן הריצה הזו כדי להתקין את החבילות המתאימות.
הפעלת האפליקציה
סביבת זמן הריצה מפעילה את האפליקציה באמצעות 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
משתני סביבה
משתני הסביבה הבאים מוגדרים על ידי סביבת זמן הריצה:
| משתנה סביבה | תיאור |
|---|---|
GAE_INSTANCE |
השם של המופע הנוכחי. |
GAE_MEMORY_MB |
נפח הזיכרון שזמין לתהליך האפליקציה. |
GAE_SERVICE |
שם השירות שצוין בקובץ app.yaml
של האפליקציה, או אם לא צוין שם שירות, הוא מוגדר כ-default. |
GAE_VERSION |
תווית הגרסה של האפליקציה הנוכחית. |
GOOGLE_CLOUD_PROJECT |
מזהה הפרויקט שמשויך לאפליקציה, שמופיע במסוף Google Cloud |
PORT |
היציאה שתקבל בקשות HTTP. |
RACK_ENV |
ההגדרה היא production. |
RAILS_ENV |
ההגדרה היא production. |
RAILS_SERVE_STATIC_FILES |
ההגדרה היא true. |
אפשר להגדיר משתני סביבה נוספים באמצעות app.yaml.
שרת מטא-נתונים
כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של Compute Engine כדי לשלוח שאילתות לגבי פרטי המופע, כולל שם המארח, כתובת ה-IP החיצונית, מזהה המופע, מטא-נתונים מותאמים אישית ופרטי חשבון השירות. ב-App Engine אי אפשר להגדיר מטא-נתונים מותאמים אישית לכל מופע, אבל אפשר להגדיר מטא-נתונים מותאמים אישית ברמת הפרויקט ולקרוא אותם מהמופעים של App Engine ו-Compute Engine.
הפונקציה לדוגמה הזו משתמשת בשרת המטא-נתונים כדי לקבל כתובת IP חיצונית של מופע.