איך פורסים אפליקציית Rails לדוגמה ב-Cloud Run ואיך משלבים מסדי נתונים מנוהלים, אחסון אובייקטים, סודות מוצפנים וצינורות עיבוד נתונים עם מחשוב ללא שרתים.
פריסת אפליקציות Rails כוללת שילוב של כמה שירותים יחד כדי ליצור פרויקט מגובש. במדריך הזה אנחנו מניחים שאתם מכירים את פיתוח האינטרנט ב-Rails.
כדי לבצע את ההדרכה הזו, צריך Ruby 3.0 ואילך ו-Rails 8 ואילך.
מטרות
- יצירה של מסד נתונים ב-Cloud SQL וחיבור שלו ל-Active Record
- יצירה של Secret Manager ושימוש בו כדי לאחסן מפתח ראשי של Rails ולגשת אליו בצורה מאובטחת
- אירוח מדיה וקבצים שהמשתמשים העלו ב-Cloud Storage מ-Active Storage
- שימוש ב-Cloud Build כדי לבצע אוטומציה של גרסאות build והעברות של מסדי נתונים
- פריסת אפליקציית Rails ב-Cloud Run
עלויות
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
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עוברים לספרייה שמכילה את הקוד לדוגמה ומריצים את הפקודות הבאות כדי לוודא שהאפליקציה מוגדרת כראוי עם אבני החן ויחסי התלות הנדרשים:
Linux/macOS
cd ruby-docs-samples/run/rails bundle installWindows
cd ruby-docs-samples\run\rails bundle install
הכנת שירותי הגיבוי
במדריך הזה נעשה שימוש בכמה שירותים כדי לספק את מסד הנתונים, אחסון המדיה ואחסון הסודות שתומכים בפרויקט Rails שנפרס. Google Cloud השירותים האלה פרוסים באזור ספציפי. כדי להבטיח יעילות בין השירותים, מומלץ לפרוס את כל השירותים באותו אזור. מידע נוסף על האזור הקרוב ביותר אליכם זמין במאמר מוצרים שזמינים לפי מיקום.
הגדרת מכונה של 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.לוחצים על יצירה.
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, מבצעים את הפעולות הבאות:
- בוחרים באחת מהאפשרויות בקטע הגנה על נתונים שרוצים להגדיר לקטגוריה.
- כדי להפעיל מחיקה עם יכולת שחזור, מסמנים את התיבה מדיניות מחיקה עם יכולת שחזור (לשחזור נתונים) ומציינים את מספר הימים שבהם רוצים לשמור אובייקטים אחרי המחיקה.
- כדי להגדיר ניהול גרסאות של אובייקטים, מסמנים את התיבה ניהול גרסאות של אובייקטים (לשליטה בגרסאות) ומציינים את מספר הגרסאות המקסימלי לכל אובייקט ואת מספר הימים שאחריהם הגרסאות הלא עדכניות יפוגו.
- כדי להפעיל את מדיניות שמירת הנתונים על אובייקטים וקטגוריות, לוחצים על תיבת הסימון שמירת נתונים (לצורך תאימות), ואז מבצעים את הפעולות הבאות:
- כדי להפעיל את הנעילה של שמירת אובייקטים, מסמנים את התיבה הפעלת שמירת אובייקטים.
- כדי להפעיל את נעילת הקטגוריה, מסמנים את תיבת הסימון הגדרת מדיניות שמירת נתונים בקטגוריה ובוחרים יחידת זמן ואת משך הזמן של תקופת השמירה.
- כדי לבחור איך להצפין את נתוני האובייקט, מרחיבים את הקטע 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 בתיבה.
לוחצים על Create secret (יצירת סוד).
בדף הפרטים של הסוד, רושמים את מספר הפרויקט:
projects/PROJECTNUM/secrets/RAILS_SECRET_NAME
בכרטיסייה Permissions, לוחצים על Add Member.
בשדה New Members (חברים חדשים), מזינים
PROJECTNUM-compute@developer.gserviceaccount.comולוחצים עלEnter.בשדה New Members (חברים חדשים), מזינים
PROJECTNUM@cloudbuild.gserviceaccount.comולוחצים על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@developer.gserviceaccount.com \ --role roles/secretmanager.secretAccessorמחליפים את
PROJECTNUMבמספר הפרויקט.נותנים לחשבון השירות ב-Cloud Build גישה לסוד:
gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \ --member serviceAccount:PROJECTNUM@cloudbuild.gserviceaccount.com \ --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 כדי להגדיל את משך הזמן הקצוב לתפוגה.אחרי שה-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, אתם נמצאים בדף הבית של האפליקציה.
עדכון האפליקציה
השלבים הראשוניים של הקצאת הרשאות ופריסה היו מורכבים, אבל תהליך העדכון פשוט יותר:
מריצים את סקריפט המיגרציה ואת ה-build של 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 מבצע לא רק את השלבים הרגילים של יצירת קובץ אימג' (יצירת קובץ אימג' של קונטיינר והעברה שלו בדחיפה ל-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, כמו שמתואר.
הסרת המשאבים
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.