סביבת זמן הריצה של Ruby

הפונקציה של Cloud Run פועלת בסביבה שמורכבת מגרסת מערכת הפעלה עם חבילות של תוספים, תמיכה בשפה וספריית Ruby Functions Framework שתומכת בפונקציה ומפעילה אותה. הסביבה הזו מזוהה לפי גרסת השפה, והיא נקראת מזהה זמן הריצה.

הכנת הפונקציה

אפשר להכין פונקציה ישירות ממסוף Google Cloud או לכתוב אותה במחשב המקומי ולהעלות אותה. כדי להכין את המחשב המקומי לפיתוח ב-Ruby, אפשר לעיין במאמר הגדרת סביבת פיתוח ב-Ruby.

זמני ריצה ותמונות בסיסיות נתמכים של Ruby

זמן ריצה המזהה של סביבת זמן הריצה מקבצים תמונת הבסיס בזמן הריצה
‫Ruby 4.0
(תצוגה מקדימה)
ruby40 ‫google-24-full (ברירת מחדל) google-24-full/ruby40
Ruby 3.4 ruby34
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/ruby34
  • google-22-full/ruby34
  • Ruby 3.3 ruby33
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/ruby33
  • google-22-full/ruby33
  • Ruby 3.2 ruby32
  • ‫google-22 (ברירת מחדל)
  • google-22-full
  • google-22/ruby32
  • google-22-full/ruby32
  • ‫Ruby 3.0 ruby30 google-18-full google-18-full/ruby30
    Ruby 2.7 ruby27 google-18-full google-18-full/ruby27
    ‫Ruby 2.6 ruby26 google-18-full google-18-full/ruby26

    בחירת זמן הריצה

    במהלך הפריסה, אפשר לבחור אחת מסביבות זמן הריצה הנתמכות של Ruby לפונקציה.

    אפשר לבחור גרסת זמן ריצה באמצעות מסוף Google Cloud או ה-CLI של gcloud. לוחצים על הכרטיסייה עם ההוראות לשימוש בכלי הרצוי:

    gcloud

    מציינים את קובץ הבסיס של Ruby לפונקציה באמצעות הדגל --base-image בזמן פריסת הפונקציה. לדוגמה:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image ruby34
    

    מחליפים את:

    • FUNCTION בשם הפונקציה שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו, תתבקשו לציין את השם.

    • FUNCTION_ENTRYPOINT עם נקודת הכניסה לפונקציה בקוד המקור. זה הקוד ש-Cloud Run מריץ כשהפונקציה פועלת. הערך של הדגל הזה צריך להיות שם של פונקציה או שם מלא של מחלקה שקיימים בקוד המקור.

    הוראות מפורטות לפריסת פונקציה באמצעות ה-CLI של gcloud מופיעות במאמר פריסת פונקציות ב-Cloud Run.

    המסוף

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

    כדי לבחור סביבת ריצה במסוף Google Cloud כשיוצרים פונקציה, פועלים לפי השלבים הבאים:

    1. במסוף Google Cloud , נכנסים לדף Cloud Run:

      כניסה ל-Cloud Run

    2. לוחצים על כתיבת פונקציה.

    3. ברשימה Runtime, בוחרים גרסת Ruby runtime.

    4. לוחצים על Create ומחכים ש-Cloud Run ייצור את השירות באמצעות עדכון placeholder.

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

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

    מבנה קוד המקור

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

    ציון יחסי תלות

    פונקציות Cloud Run שנכתבות ב-Ruby משתמשות ב-bundler כדי לגשת לתלות.

    Functions Framework הוא תלות נדרשת לכל הפונקציות. למרות שפונקציות Cloud Run מתקינות אותו בשמכם כשיוצרים את הפונקציה, מומלץ לכלול אותו כתלות מפורשת כדי שהדברים יהיו ברורים.

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

    כל פונקציה חייבת לספק Gemfile שמציין את אבן החן functions_framework, יחד עם אבני חן נוספות שהפונקציה צריכה. ‫Gemfile חייב להיות באותה ספרייה כמו הקובץ app.rb שמכיל את קוד הפונקציה. בנוסף, הפונקציה צריכה לספק קובץ נעילה שמציין את כל התלויות הטרנזיטיביות והגרסאות המדויקות שלהן. הקובץ הזה, Gemfile.lock, נמצא גם הוא באותה ספרייה לצד Gemfile.

    כשפורסים את הפונקציה, Cloud Run מוריד ומתקין את התלות שהוגדרה בקובצי Gemfile ו-Gemfile.lock באמצעות bundler.

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

    דוגמה ל-Gemfile:

    source "https://rubygems.org"
    
    gem "functions_framework", "~> 0.7"
    gem "google-cloud-storage", "~> 1.29"
    

    אריזת יחסי תלות מקומיים

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

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

    myfunction/
    ├── Gemfile
    ├── Gemfile.lock
    ├── app.rb
    └── my_private_gem/
        ├── lib/
        |   └── my_private_gem.rb
        └── my_private_gem.gemspec
    

    הרשומה Gemfile יכולה להיראות כך:

    source "https://rubygems.org"
    
    gem "functions_framework", "~> 0.7"
    gem "my_private_gem", path: "./my_private_gem"
    

    מידע נוסף על הפניות לנתיבי gem מקומיים מופיע במאמר בנושא הפניה ל-Gemfile.