איך פורסים אפליקציית Rails לדוגמה ב-Cloud Run, ואיך משלבים מסדי נתונים מנוהלים, מאגר אובייקטים, סודות מוצפנים וצינורות עיבוד נתונים של גרסאות build עם מחשוב בלי שרת (serverless computing).
פריסת אפליקציות Rails כוללת שילוב של כמה שירותים כדי ליצור פרויקט מגובש. במדריך הזה אנחנו יוצאים מנקודת הנחה שאתם מכירים את פיתוח האינטרנט ב-Rails.
כדי לבצע את הפעולות במדריך הזה, צריך להתקין את Ruby בגרסה 3.0 ואילך ואת Rails בגרסה 8 ואילך.
מטרות
- יצירה של מסד נתונים ב-Cloud SQL וחיבור שלו ל-Active Record
- יצירה של Secret Manager ושימוש בו כדי לאחסן מפתח ראשי של Rails ולגשת אליו בצורה מאובטחת
- אירוח מדיה וקבצים שהמשתמשים העלו ב-Cloud Storage מ-Active Storage
- שימוש ב-Cloud Build כדי לבצע אוטומציה של גרסאות build והעברות של מסדי נתונים
- פריסת אפליקציית Rails ב-Cloud Run
עלויות
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Run, Cloud SQL, Cloud Build, Secret Manager, and Compute Engine APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - צריך לוודא שיש הרשאות מספיקות בחשבון שבו משתמשים במדריך הזה.
הכנת הסביבה
במדריך הזה משתמשים בכמה שירותי Google Cloud כדי לספק את מסד הנתונים, את אחסון המדיה ואת אחסון הסודות שתומכים באפליקציית Rails שנפרסה. כדי להכין את הסביבה, מגדירים אזור לפריסת השירותים ומשכפלים את אפליקציית Rails.
הגדרת פרויקט ואזור כברירת מחדל
מגדירים את תצורת הפרויקט שמוגדרת כברירת מחדל ל-ה-CLI של gcloud באמצעות הפקודה הבאה:
gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.קובעים את האזור:
export REGION=REGIONמחליפים את
REGIONבמיקום המתאים. כדי שהשירותים יפעלו ביעילות, כולם צריכים להיות פרוסים באותו אזור. במאמר זמינות המוצרים לפי מיקום תוכלו לקרוא מידע נוסף על האזור הקרוב ביותר אליכם.
שכפול של אפליקציית Rails
הקוד של אפליקציית Rails לדוגמה נמצא במאגר GoogleCloudPlatform/ruby-docs-samples ב-GitHub.
משכפלים את המאגר:
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.gitעוברים לספרייה שמכילה את הקוד לדוגמה ומריצים את הפקודות הבאות כדי לוודא שהאפליקציה מוגדרת כמו שצריך עם ה-gems ויחסי התלות הנדרשים:
Linux/macOS
cd ruby-docs-samples/run/rails bundle installWindows
cd ruby-docs-samples\run\rails bundle install
הכנת שירותים תומכים
במדריך הזה נעשה שימוש בכמה Google Cloud שירותים כדי לספק את מסד הנתונים, אחסון המדיה ואחסון הסודות שתומכים בפרויקט Rails שנפרס. השירותים האלה פרוסים באזור ספציפי. כדי שהשירותים יפעלו ביעילות, מומלץ לפרוס את כולם באותו אזור. במאמר זמינות המוצרים לפי מיקום תוכלו לקרוא מידע נוסף על האזור הקרוב ביותר אליכם.
הגדרת מכונת Cloud SQL ל-PostgreSQL
Rails תומך בכמה מסדי נתונים רלציוניים, כולל כמה שמסופקים על ידי Cloud SQL. במדריך הזה נשתמש ב-PostgreSQL, מסד נתונים בקוד פתוח שמשמש בדרך כלל אפליקציות Rails.
בקטעים הבאים מוסבר איך ליצור מכונה, מסד נתונים ומשתמש במסד הנתונים של PostgreSQL בשביל אפליקציית Rails.
יצירת מכונת PostgreSQL
המסוף
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
לוחצים על Create Instance.
לוחצים על Choose PostgreSQL (בחירת PostgreSQL).
בשדה Instance ID (מזהה המופע), מזינים שם למופע (
INSTANCE_NAME).בשדה סיסמה, מזינים סיסמה למשתמש postgres.
משאירים את ערכי ברירת המחדל בשאר השדות.
לוחצים על Create Instance.
gcloud
יוצרים את מכונת PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --database-version POSTGRES_12 \ --tier db-f1-micro \ --region REGIONמחליפים את מה שכתוב בשדות הבאים:
INSTANCE_NAME: השם של המכונה החדשה ב-Cloud SQL
REGION: Google Cloud האזור
יחלפו כמה דקות עד שהמכונה תיווצר ותהיה מוכנה לשימוש.
יצירת מסד נתונים
המסוף
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
בוחרים את המופע INSTANCE_NAME.
עוברים לכרטיסייה מסדי נתונים.
לוחצים על יצירת מסד נתונים.
בתיבת הדו-שיח Database name, מזינים
DATABASE_NAME.לוחצים על יצירה.
gcloud
יוצרים את מסד הנתונים במופע שנוצר לאחרונה:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAMEמחליפים את
DATABASE_NAMEבשם של מסד הנתונים בתוך המכונה.
יצירת משתמש
יוצרים סיסמה אקראית למשתמש במסד הנתונים וכותבים אותה לקובץ בשם dbpassword:
cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1 > dbpassword
המסוף
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
בוחרים את המופע INSTANCE_NAME.
עוברים לכרטיסייה משתמשים.
לוחצים על הוספת חשבון משתמש.
בתיבת הדו-שיח אימות מובנה:
- מזינים את שם המשתמש
DATABASE_USERNAME. - מזינים את התוכן של הקובץ
dbpasswordכסיסמהPASSWORD.
- מזינים את שם המשתמש
לוחצים על הוספה.
gcloud
יוצרים את המשתמש במופע שנוצר לאחרונה ומגדירים את הסיסמה שלו להיות התוכן של dbpassword:
gcloud sql users create DATABASE_USERNAME \ --instance=INSTANCE_NAME --password=$(cat dbpassword)מחליפים את
DATABASE_USERNAMEבשם של המשתמש בתוך המכונה.
הגדרת מאגר Artifact Registry
משתמשים ב-Artifact Registry כדי ליצור מאגר לאחסון קובץ האימג' של הקונטיינר.
המסוף
נכנסים לדף Artifact Registry במסוף Google Cloud .
לוחצים על Create Repository.
כתבו:
- בשדה Name (שם), מזינים cloud-run-source-deploy.
- בקטע Format (פורמט), בוחרים באפשרות Docker.
- בשדה אזור, בוחרים באפשרות REGION.
משאירים את ערכי ברירת המחדל בשאר השדות.
לוחצים על יצירה.
gcloud
יוצרים מאגר Artifact Registry:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format docker \ --location REGION
הגדרת קטגוריה של Cloud Storage
אתם יכולים לארח נכסים סטטיים של Rails ומדיה שהועלתה על ידי משתמשים במאגר אובייקטים עם זמינות גבוהה באמצעות Cloud Storage.
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
- לוחצים על יצירה.
- ממלאים את פרטי הקטגוריה בדף Create a bucket. כדי לעבור לשלב הבא לוחצים על Continue.
-
בקטע Get started (תחילת העבודה), מבצעים את הפעולות הבאות:
- מזינים שם ייחודי בהיקף גלובלי שעומד בקריטריונים לשמות של קטגוריות.
- כדי להוסיף תווית לקטגוריה, מרחיבים את הקטע Labels (), לוחצים על add_box
Add label ומציינים
keyו-valueבשביל התווית.
- בשדה Location בוחרים את האזור הבא: us-central1
-
בקטע Choose how to store your data, מבצעים את הפעולות הבאות:
- בקטע Set a default class, בוחרים באפשרות הבאה: Standard.
- כדי להפעיל מרחב שמות היררכי, בקטע Optimize storage for data-intensive workloads, בוחרים באפשרות Enable hierarchical namespace on this bucket.
- בקטע Choose how to control access to objects, בוחרים אם הקטגוריה אוכפת public access prevention או לא, ואז בוחרים שיטת בקרת גישה לאובייקטים של הקטגוריה.
-
בקטע Choose how to protect object data, מבצעים את הפעולות הבאות:
- בוחרים באחת מהאפשרויות בקטע הגנה על נתונים שרוצים להגדיר לקטגוריה.
- כדי להפעיל את האפשרות מחיקה זמנית, לוחצים על תיבת הסימון Soft delete policy (For data recovery) ומציינים את מספר הימים שבהם רוצים לשמור את האובייקטים אחרי המחיקה.
- כדי להגדיר ניהול גרסאות של אובייקטים, לוחצים על תיבת הסימון ניהול גרסאות של אובייקטים (לניהול גרסאות) ומציינים את המספר המקסימלי של גרסאות לכל אובייקט ואת מספר הימים שאחריהם פג התוקף של הגרסאות הלא עדכניות.
- כדי להפעיל את מדיניות שמירת הנתונים על אובייקטים וקטגוריות, לוחצים על תיבת הסימון שמירת נתונים (לצורך תאימות), ואז מבצעים את הפעולות הבאות:
- כדי להפעיל את נעילת שמירת האובייקטים, לוחצים על תיבת הסימון Enable object retention.
- כדי להפעיל את נעילת הקטגוריה, מסמנים את התיבה הגדרת מדיניות שמירת נתונים בקטגוריה ובוחרים יחידת זמן ואת משך הזמן של תקופת השמירה.
- כדי לבחור איך להצפין את נתוני האובייקט, מרחיבים את הקטע Data encryption () ובוחרים Data encryption method.
- בוחרים באחת מהאפשרויות בקטע הגנה על נתונים שרוצים להגדיר לקטגוריה.
-
בקטע Get started (תחילת העבודה), מבצעים את הפעולות הבאות:
- לוחצים על יצירה.
gcloud
יצירת קטגוריה של Cloud Storage. כדי ליצור שם ייחודי לקטגוריה של Cloud Storage, משתמשים ב-PROJECT_ID ובסיומת לבחירתכם,
MEDIA_BUCKET_SUFFIX. ב-Cloud Storage, שמות הקטגוריות חייבים להיות ייחודיים באופן גלובלי.gcloud storage buckets create gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \ --location=REGION
אחרי שיוצרים קטגוריה, כדי שהתמונות שמעלים יהיו ציבוריות, צריך לשנות את ההרשאות של אובייקטים של תמונות כך שכולם יוכלו לקרוא אותם.
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
ברשימת הקטגוריות, לוחצים על השם של הקטגוריה שרוצים להגדיר כציבורית.
לוחצים על הכרטיסייה Permissions בחלק העליון של הדף.
לוחצים על הכפתור הוספת חברים.
מופיעה תיבת הדו-שיח הוספת חברים.
בשדה New members מזינים את הערך
allUsers.בתפריט הנפתח Select a role, בוחרים את תפריט המשנה Cloud Storage, ולוחצים על האפשרות Storage Object Viewer.
לוחצים על Save.
אחרי אישור השיתוף באופן ציבורי, מופיע סמל קישור לכל אובייקט בעמודה public access. אפשר ללחוץ על הסמל הזה כדי לקבל את כתובת ה-URL של האובייקט.
במאמר פתרון בעיות מוסבר איך מקבלים מידע מפורט על שגיאות בנושא פעולות ב-Ruby שנכשלו במסוף Google Cloud .
gcloud
משתמשים בפקודה
gcloud storage buckets add-iam-policy-bindingכדי להגדיר את כל האובייקטים כציבוריים. משתמשים בערך שלMEDIA_BUCKET_SUFFIXשבו השתמשתם כשיצרתם את הקטגוריה.gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \ --member=allUsers --role=roles/storage.objectViewer
אחסון ערכים סודיים ב-Secret Manager
אחרי שהגדרתם את השירותים התומכים, אתם צריכים להזין ב-Rails מידע מאובטח, כמו סיסמאות, כדי לגשת לשירותים האלה. במקום להזין את הערכים האלה ישירות בקוד המקור של Rails, במדריך הזה נעשה שימוש ב-Rails Credentials וב-Secret Manager כדי לאחסן את המידע הזה בצורה מאובטחת.
יצירת קובץ מוצפן של פרטי כניסה ואחסון המפתח כסוד ב-Secret Manager
Rails מאחסן סודות בקובץ מוצפן בשם config/credentials.yml.enc.
אפשר לפענח את הקובץ באמצעות config/master.key המקומי או משתנה הסביבה ENV["RAILS_MASTER_KEY"]. בקובץ פרטי הכניסה אפשר לאחסן את הסיסמה למסד הנתונים של מכונת Cloud SQL ומפתחות גישה אחרים לממשקי API חיצוניים.
אתם יכולים לאחסן את המפתח הזה באופן מאובטח ב-Secret Manager. לאחר מכן, תוכלו להעניק גישה למפתח ל-Cloud Run ול-Cloud Build על ידי מתן גישה לחשבונות השירות שלהם. חשבונות שירות מזוהים באמצעות כתובת אימייל שמכילה את מספר הפרויקט.
יוצרים את הקובץ
config/credentials.yml.encבאמצעות הפקודה הבאה:bin/rails credentials:editהפקודה תיצור
config/master.keyאם לא הוגדר מפתח מאסטר, ותיצור קובץconfig/credentials.yml.encאם הקובץ לא קיים. ייפתח קובץ זמני בדפדפן ברירת המחדל$EDITORעם התוכן המפוענח של הסודות שצריך להוסיף.מעתיקים את הסיסמה של מסד הנתונים של מכונת PostgreSQL שנוצרה זה עתה מהקובץ
dbpasswordומדביקים אותה בקובץ של פרטי הכניסה:secret_key_base: GENERATED_VALUE gcp: db_password: PASSWORDאפשר לגשת לסודות באמצעות
Rails.application.credentials. לדוגמה, הפקודהRails.application.credentials.secret_key_baseאמורה להחזיר את בסיס המפתח הסודי של האפליקציה, והפקודהRails.application.credentials.gcp[:db_password]אמורה להחזיר את הסיסמה למסד הנתונים.
config/credentials/yml.encמאוחסן בצורה מוצפנת, אבל אפשר לאחסן אתconfig/master.keyב-Secret Manager.המסוף
נכנסים לדף Secret Manager במסוף Google Cloud .
לוחצים על יצירת סוד.
בשדה Name, מזינים שם לסוד
RAILS_SECRET_NAME.בתיבת הדו-שיח Secret value, מדביקים את הערך של master.key בתיבה.
לוחצים על יצירת סוד.
בדף הפרטים של הסוד, רושמים את מספר הפרויקט:
projects/PROJECTNUM/secrets/RAILS_SECRET_NAME
בכרטיסייה Permissions לוחצים על Add Member.
בשדה New Members (רק הצטרפתי), מזינים
PROJECTNUM-compute@ולוחצים עלEnter.בשדה New Members (רק הצטרפתי), מזינים
PROJECTNUM@cloudbuild.ולוחצים עלEnter.בתפריט הנפתח Role, בוחרים באפשרות Secret Manager Secret Accessor.
לוחצים על Save.
gcloud
יוצרים סוד חדש עם הערך של config/master.key:
gcloud secrets create RAILS_SECRET_NAME --data-file config/master.keyמחליפים את
RAILS_SECRET_NAMEבשם של הסוד החדש.כדי לוודא שהסוד נוצר, בודקים אותו:
gcloud secrets describe RAILS_SECRET_NAME gcloud secrets versions access latest --secret RAILS_SECRET_NAMEמקבלים את הערך של מספר הפרויקט:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'נותנים גישה לסוד לחשבון השירות של Cloud Run:
gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \ --member serviceAccount:PROJECTNUM-compute@ \ --role roles/secretmanager.secretAccessorמחליפים את
PROJECTNUMבמספר הפרויקט.נותנים לחשבון השירות ב-Cloud Build גישה לסוד:
gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \ --member serviceAccount:PROJECTNUM@cloudbuild. \ --role roles/secretmanager.secretAccessorבפלט, מוודאים ששני חשבונות השירות מופיעים כחברים ב-
bindings.
חיבור אפליקציית Rails למסד נתונים ולאחסון בסביבת הייצור
במדריך הזה נעשה שימוש במופע של PostgreSQL כמסד הנתונים של הייצור וב-Cloud Storage כמסד הנתונים בקצה העורפי. כדי ש-Rails יוכל להתחבר למסד הנתונים ולמאגר האחסון החדשים שנוצרו, צריך לציין את כל המידע שנדרש לגישה אליהם בקובץ .env. הקובץ .env מכיל את ההגדרות של משתני הסביבה של האפליקציה. האפליקציה תקרא את הקובץ הזה באמצעות ה-Gem של dotenv. מכיוון שהסודות מאוחסנים ב-credentials.yml.enc וב-Secret Manager, אין צורך להצפין את .env כי הוא לא מכיל פרטי כניסה רגישים.
- כדי להגדיר את אפליקציית Rails להתחבר למסד הנתונים ולקטגוריית האחסון, פותחים את הקובץ
.env. משנים את ההגדרות של קובץ
.envלהגדרות הבאות. משתמשים בערךMEDIA_BUCKET_SUFFIXשהשתמשתם בו כשיצרתם את הדלי.PRODUCTION_DB_NAME: DATABASE_NAME PRODUCTION_DB_USERNAME: DATABASE_USERNAME CLOUD_SQL_CONNECTION_NAME: PROJECT_ID:REGION:INSTANCE_NAME GOOGLE_PROJECT_ID: PROJECT_ID STORAGE_BUCKET_NAME: PROJECT_ID-MEDIA_BUCKET_SUFFIXעכשיו אפליקציית Rails מוגדרת לשימוש ב-Cloud SQL וב-Cloud Storage כשפורסים ב-Cloud Run.
פריסת האפליקציה ב-Cloud Run
אחרי שמגדירים את שירותי הגיבוי, אפשר לפרוס את האפליקציה כשירות Cloud Run.
משתמשים ב-
cloudbuild.yamlשסופק כדי להפעיל את Cloud Build, ליצור את קובץ האימג', להריץ את ההעברות של מסד הנתונים ולאכלס את הנכסים הסטטיים:gcloud builds submit --config cloudbuild.yaml \ --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAMEמחליפים את
SERVICE_NAMEבשם של השירות. ה-build הראשון הזה נמשך כמה דקות. אם חלף הזמן הקצוב לתפוגה של הבנייה, צריך להוסיף את האפשרות --timeout=2000s לפקודת הבנייה כדי להגדיל את משך הזמן הקצוב לתפוגה.אחרי שה-build מסתיים בהצלחה, פורסים את שירות Cloud Run בפעם הראשונה, ומגדירים את אזור השירות, קובץ הבסיס ואת מכונת Cloud SQL המקושרת:
gcloud run deploy SERVICE_NAME \ --region REGION \ --image REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/SERVICE_NAME \ --add-cloudsql-instances PROJECT_ID:REGION:INSTANCE_NAME \ --allow-unauthenticatedאמור להופיע פלט שמראה שהפריסה הצליחה, עם כתובת URL של שירות.
כדי לראות את השירות שנפרס, עוברים לכתובת ה-URL של השירות.
אם כתובת ה-URL של השירות היא Cat Photo Album, אתם נמצאים בדף הבית של האפליקציה. כדאי לנסות להעלות תמונה חדשה. אם התמונה הועלתה בהצלחה, סימן שהאפליקציה של Rails נפרסה בהצלחה.
אם כתובת ה-URL של השירות היא Cat Photo Album, אתם נמצאים בדף הבית של האפליקציה.
עדכון האפליקציה
השלבים הראשונים של ההקצאה והפריסה היו מורכבים, אבל תהליך העדכון פשוט יותר:
מריצים את הסקריפט של Cloud Build לבנייה ולהעברה:
gcloud builds submit --config cloudbuild.yaml \ --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAMEפורסים את השירות ומציינים רק את האזור והתמונה:
gcloud run deploy SERVICE_NAME \ --region REGION \ --image REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/SERVICE_NAME
הסבר על הקוד
אפליקציית הדוגמה של Rails נוצרה באמצעות פקודות Rails רגילות. הפקודות הבאות יוצרות את האפליקציה cat_album ומשתמשות בפקודת ה-scaffold כדי ליצור מודל, בקר ותצוגות עבור משאב התמונות:
rails new cat_album
rails generate scaffold Photo caption:text
חיבור למסד נתונים
הקובץ config/database.yml מכיל את ההגדרה שנדרשת כדי לגשת למסדי הנתונים בסביבות שונות (פיתוח, בדיקה, ייצור). לדוגמה, מסד הנתונים בסביבת הייצור מוגדר לפעול ב-Cloud SQL ל-PostgreSQL. שם מסד הנתונים ושם המשתמש מוגדרים באמצעות משתני סביבה בקובץ .env, ואילו הסיסמה של מסד הנתונים מאוחסנת בקובץ config/credentials.yml.enc, שנדרש RAILS_MASTER_KEY כדי לפענח אותו.
כשהאפליקציה פועלת ב-Cloud Run (מנוהל באופן מלא), היא מתחברת למופע PostgreSQL באמצעות שקע שסופק על ידי סביבת Cloud Run. כשהאפליקציה פועלת במחשב המקומי, היא מתחברת למכונה של PostgreSQL באמצעות שרת ה-proxy של Cloud SQL Auth.
מדיה שהמשתמשים העלו ונשמרה בענן
ב-Rails משתמשים ב-Active Storage כדי להעלות קבצים לספקי שירותי אחסון. הקבצים config/storage.yml ו-config/environments/production.rb מציינים את Cloud Storage כספק השירות בסביבת הייצור.
אוטומציה באמצעות Cloud Build
קובץ cloudbuild.yaml מבצע לא רק את השלבים הרגילים של פיתוח גרסת build של קובץ אימג' (יצירת קובץ האימג' של הקונטיינר והעברה שלו בדחיפה ל-Artifact Registry), אלא גם את ההעברות של מסד הנתונים של Rails. ההעברה הזו מתבצעת באמצעות משימות של Cloud Run, שבהן נעשה שימוש בפקודה בהתאמה אישית כדי שהמאגר יבצע את ההעברה, ולא שרת האינטרנט שמוגדר כברירת מחדל.
בתצורה הזו נעשה שימוש במשתני החלפה. אם משנים את הערכים בקובץ ישירות, אפשר להסיר את הדגל --substitutions בזמן ההעברה.
בהגדרה הזו, רק ההעברות הקיימות בספרייה db/migrate מופעלות. כדי ליצור קובצי העברה, קראו את המאמר Active Record Migrations.
כדי ליצור את האימג' ולהחיל את ההעברות, תצורת ה-build של Cloud Build צריכה גישה לסוד RAILS_MASTER_KEY מ-Secret Manager. בשדה availableSecrets מגדירים את גרסת הסוד ואת משתני הסביבה שבהם יש להשתמש בשביל הסוד. הסוד של מפתח הראשי מועבר כארגומנט בשלב של יצירת קובץ האימג' של ה-build, ואז הוא מוגדר להיות RAILS_MASTER_KEY ב-Dockerfile כשיוצרים את קובץ האימג'.
כדי להרחיב את ההגדרה של Cloud Build כך שתכלול את הפריסה בהגדרה אחת בלי להריץ שתי פקודות, אפשר לעיין במאמר פריסה רציפה מ-git באמצעות Cloud Build. כמו שמתואר, צריך לבצע שינויים ב-IAM.
Cloud Logging ו-Error Reporting
כברירת מחדל, Rails מתעדת ביומן את הפעילות ב-stdout בסביבת הייצור כשהיא מוגדרת עם RAILS_LOG_TO_STDOUT. כשהאפליקציה פועלת ב-Cloud Run, הסביבה מתעדת באופן אוטומטי את היומנים שנכתבים ל-stdout ול-stderr ושומרת אותם ב-Cloud Logging.
כדי לתעד באופן אוטומטי חריגים שלא טופלו ולהציג עקבות מחסנית מעוצבות בדוח שגיאות, מוסיפים את ה-gem google-cloud-error_reporting אל Gemfile:
gem "google-cloud-error_reporting"
כשמפעילים את אפליקציית Rails במצב ייצור, Bundler טוען את הספרייה באופן אוטומטי ומגדיר את Error Reporting כדי לתעד חריגים ממערך Rack. מידע נוסף מופיע במאמר בנושא הגדרת Error Reporting ב-Ruby.
הסרת המשאבים
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.