ציון יחסי תלות ב-Ruby

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

כל פונקציה חייבת לספק 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"

מריצים את הפקודה הבאה כדי להתקין את ה-gem‏ functions_framework ותלות אחרות:

bundle install

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

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

bundle lock

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

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

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

אפשר גם לארוז ולפרוס יחסי תלות לצד הפונקציה. הגישה הזו שימושית אם התלות לא זמינה דרך מנהל החבילות 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.