איך מתחילים לפתח אפליקציות Ruby on Rails שפועלות בסביבה גמישה ב-App Engine. האפליקציות שאתם יוצרים פועלות על אותה תשתית שמפעילה את כל המוצרים של Google, כך שאתם יכולים להיות בטוחים שהן יכולות להתאים את עצמן לכל המשתמשים שלכם, בין אם יש לכם כמה משתמשים או מיליונים.
המדריך הזה מניח שאתם מכירים את פיתוח האתרים ב-Rails. במדריך מוסבר איך להגדיר את Cloud SQL ל-PostgreSQL באפליקציית Rails חדשה. אתם יכולים להשתמש במדריך גם כחומר עזר להגדרת אפליקציות Rails קיימות לשימוש ב-Cloud SQL ל-PostgreSQL.
המדריך הזה תומך ב-Ruby 3.0 ואילך, ודורש את הגרסה הזו.
לפני שמתחילים
-
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 SQL Admin API, if it is 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
הכנת מכונה של Cloud SQL ל-PostgreSQL
הגדרת מכונה של Cloud SQL ל-PostgreSQL בשביל המדריך הזה.
יוצרים מכונה של PostgreSQL. במדריך הזה, שם המכונה הוא
rails-cloudsql-instance.יוצרים מסד נתונים במכונה. במדריך הזה, השם של מסד הנתונים בסביבת הייצור הוא
cat_list_production.מגדירים את הסיסמה של משתמש postgres במכונה.
הגדרת הסביבה המקומית ל-Rails
כדי להגדיר את הסביבה המקומית למדריך הזה:
מידע נוסף על התקנת Rails ויחסי התלות שלו זמין במדריך הרשמי תחילת העבודה עם Rails.
אחרי שמשלימים את הדרישות המוקדמות, יוצרים אפליקציית Rails ופורסים אותה באמצעות Cloud SQL ל-PostgreSQL. בקטעים הבאים מוסבר איך להגדיר אפליקציה, להתחבר ל-Cloud SQL ל-PostgreSQL ולפרוס את האפליקציה.
יצירת אפליקציה חדשה להצגת חתולים
מריצים את הפקודה
rails newכדי ליצור אפליקציית Rails חדשה. האפליקציה הזו מאחסנת רשימה של חתולים ב-Cloud SQL ל-PostgreSQL.rails new cat_sample_appעוברים לספרייה שמכילה את אפליקציית Rails שנוצרה.
cd cat_sample_app
הרצת האפליקציה באופן מקומי
כדי להריץ את אפליקציית Rails החדשה במחשב המקומי:
מפעילים שרת אינטרנט מקומי:
bundle exec bin/rails serverבדפדפן, נכנסים לכתובת http://localhost:3000/.
באפליקציה לדוגמה מוצג הלוגו של Rails עם הגרסאות של Rails ו-Ruby.
צור תבנית לרשימה של חתולים
צור פיגום למשאב בשם Cat שמשמש ליצירת רשימה של חתולים עם השם והגיל שלהם.
יוצרים את התבנית.
bundle exec rails generate scaffold Cat name:string age:integerהפקודה יוצרת מודל, בקר ותצוגות למשאב
Cat.invoke active_record create db/migrate/20230922063608_create_cats.rb create app/models/cat.rb invoke test_unit create test/models/cat_test.rb create test/fixtures/cats.yml invoke resource_route route resources :cats invoke scaffold_controller create app/controllers/cats_controller.rb invoke erb create app/views/cats create app/views/cats/index.html.erb create app/views/cats/edit.html.erb create app/views/cats/show.html.erb create app/views/cats/new.html.erb create app/views/cats/_form.html.erb create app/views/cats/_cat.html.erb invoke resource_route invoke test_unit create test/controllers/cats_controller_test.rb create test/system/cats_test.rb invoke helper create app/helpers/cats_helper.rb invoke test_unit invoke jbuilder create app/views/cats/index.json.jbuilder create app/views/cats/show.json.jbuilder create app/views/cats/_cat.json.jbuilderפותחים את הקובץ
config/routes.rbכדי לראות את התוכן הבא שנוצר.מוסיפים לקובץ את
root 'cats#index'.שומרים את הקובץ וסוגרים אותו.
בודקים את אפליקציית Rails כמו בהוראות הקודמות.
שימוש ב-Cloud SQL ל-PostgreSQL עם App Engine
Cloud SQL ל-PostgreSQL הוא שירות מנוהל של מסד נתונים, שבעזרתו אפשר ליצור, לתחזק ולנהל מסדי נתונים רלציוניים של PostgreSQL ב-Google Cloud. אתם יכולים להשתמש ב-Cloud SQL באפליקציית Rails כמו בכל מסד נתונים רלציוני אחר.
הגדרת Cloud SQL ל-PostgreSQL
כדי להתחיל להשתמש ב-Cloud SQL עם אפליקציית Rails בסביבת הייצור:
מוסיפים את ה-gems
pgו-appengineלקובץGemfile.bundle add pg bundle add appengineה-
Gemfileשל Rails מכיל את הרשומות הנוספות הבאות שלgem:כדי להגדיר את אפליקציית Rails להתחברות ל-Cloud SQL, פותחים את הקובץ
config/database.yml. הגדרות ברירת המחדל הבאות של מסד הנתונים של SQLite מוצגות:מגדירים את שם החיבור של מכונת Cloud SQL לסביבת הייצור של App Engine.
מאחזרים את שם החיבור של המכונה.
gcloud sql instances describe rails-cloudsql-instanceמעתיקים את הערך שמופיע לצד
connectionName.
משנים את ההגדרה של מסד הנתונים בסביבת הייצור של
database.ymlכך:כאשר:
-
[YOUR_POSTGRES_USERNAME]מייצג את שם המשתמש של המכונה של Cloud SQL ל-PostgreSQL. -
[YOUR_POSTGRES_PASSWORD]מייצג את הסיסמה של המכונה של Cloud SQL ל-PostgreSQL. -
[YOUR_INSTANCE_CONNECTION_NAME]מייצג את שם החיבור למכונה שהעתקתם בשלב הקודם.
-
עכשיו אפליקציית Rails מוגדרת להשתמש ב-Cloud SQL כשפורסים אותה בסביבה הגמישה ב-App Engine.
פריסת האפליקציה בסביבה הגמישה של App Engine
בסביבה הגמישה ב-App Engine משתמשים בקובץ שנקרא app.yaml כדי לתאר את הגדרות הפריסה של האפליקציה. אם הקובץ הזה לא קיים, ה-CLI של gcloud ינסה לנחש את הגדרות הפריסה. עם זאת, צריך להגדיר את הקובץ כדי לספק את הגדרות התצורה הנדרשות למפתח הסודי של Rails ול-Cloud SQL.
כדי להגדיר את האפליקציה לדוגמה לפריסה ב-App Engine, יוצרים קובץ חדש בשם app.yaml בתיקיית השורש של אפליקציית Rails ומוסיפים את הפרטים הבאים:
מגדירים את המפתח הסודי של Rails בקובץ app.yaml
כשפורסים אפליקציית Rails בסביבת production, צריך להגדיר את משתנה הסביבה SECRET_KEY_BASE עם מפתח סודי כדי להגן על נתוני הסשן של המשתמשים. Rails קורא את משתנה הסביבה הזה בסביבה production.
יוצרים מפתח סודי חדש.
bundle exec bin/rails secretמעתיקים את המפתח הסודי שנוצר.
פותחים את הקובץ
app.yamlשיצרתם קודם ומוסיפים קטעenv_variables. הקובץenv_variablesמגדיר משתני סביבה בסביבה הגמישה ב-App Engine. הקובץapp.yamlאמור להיראות כמו בדוגמה הבאה, כש-[SECRET_KEY]מוחלף במפתח הסודי שלכם.
הגדרת המכונה של Cloud SQL בקובץ app.yaml
בשלב הבא, מגדירים את סביבה גמישה ב-App Engine כך שתשתמש במכונה ספציפית של Cloud SQL. כדי לעשות את זה, צריך לציין את שם החיבור של המכונה של Cloud SQL בקובץ התצורה app.yaml.
פותחים את הקובץ
app.yamlומוסיפים קטע חדש בשםbeta_settings.מגדירים פרמטר בתצורה של עץ
cloud_sql_instancesעם שם החיבור של המכונה בתור הערך.ה-
app.yamlאמור להיראות כך:
יצירת אפליקציה בסביבה גמישה ב-App Engine
אם זו הפעם הראשונה שאתם פורסים אפליקציה, אתם צריכים ליצור אפליקציה בסביבה גמישה ב-App Engine ולבחור את האזור שבו אתם רוצים להריץ את אפליקציית Rails.
יוצרים אפליקציה ב-App Engine.
gcloud app createבוחרים אזור שתומך בסביבה הגמישה ב-App Engine לאפליקציות Ruby. מידע נוסף על אזורים ו-zones
פריסת גרסה חדשה
בשלב הבא, מריצים את הפקודה הבאה כדי לפרוס גרסה חדשה של אפליקציית Rails שמתוארת בקובץ app.yaml, בלי להפנות את התנועה מגרסת ברירת המחדל הנוכחית:
gcloud app deploy --no-promote
הפריסה יכולה להימשך כמה דקות. מחכים להודעה שהפעולה בוצעה בהצלחה. אפשר לראות את הגרסאות שנפרסו ברשימת הגרסאות של App Engine.
אחרי שפורסים את הגרסה החדשה, אם מנסים לגשת אליה, מופיעה הודעת השגיאה הבאה כי לא העברתם את מסד הנתונים.

מתן ההרשאה הנדרשת ל-Gem appengine
בשלב הבא, נותנים לחשבון השירות של cloudbuild גישה להרצת העברות של מסדי נתונים בסביבת הייצור באמצעות ה-gem appengine.
רשימת הפרויקטים הזמינים.
gcloud projects listבפלט, מאתרים את הפרויקט שבו רוצים להשתמש כדי לפרוס את האפליקציה ומעתיקים את מספר הפרויקט.
מוסיפים חבר חדש למדיניות ה-IAM של הפרויקט לתפקיד
roles/editorכדי להריץ העברות של מסדי נתונים. מחליפים אתPROJECT_IDבמזהה הפרויקט ב- Google Cloud , ואתPROJECT_NUMBERבמספר הפרויקט שהעתקתם בשלב הקודם.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER@cloudbuild. \ --role=roles/editor
העברת מסד הנתונים של Rails
העברות של מסדי נתונים ב-Rails משמשות לעדכון הסכימה של מסד הנתונים בלי להשתמש ישירות בתחביר SQL. בשלב הבא מעבירים את מסד הנתונים של cat_list_production.
ה-gem appengine מספק את המשימה appengine:exec של Rake כדי להריץ פקודה בגרסה האחרונה של האפליקציה שנפרסה בסביבה הגמישה ב-App Engine בסביבת הייצור.
מעבירים את מסד הנתונים של Cloud SQL ל-PostgreSQL
cat_list_productionבסביבת הייצור.bundle exec rake appengine:exec -- bundle exec rake db:migrateהפלט אמור להיראות כך:
---------- EXECUTE COMMAND ---------- bundle exec rake db:migrate Debuggee gcp:787021104993:8dae9032f8b02004 successfully registered == 20230922063608 CreateCats: migrating ======================================= -- create_table(:cats) -> 0.0219s == 20230922063608 CreateCats: migrated (0.0220s) ============================== ---------- CLEANUP ----------כדי לאמת את העברת מסד הנתונים, מזינים את כתובת ה-URL הבאה בדפדפן:
https://VERSION_ID-dot-PROJECT_ID.REGION_ID.r.appspot.comמחליפים את מה שכתוב בשדות הבאים:
-
VERSION_ID: הגרסה החדשה של האפליקציה שפרסתם קודם. כדי לקבל רשימה של גרסאות, משתמשים ב-gcloud app versions list. הפריט האחרון של גרסת השירות default הוא הפריסה האחרונה. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
REGION_ID: קוד ש-App Engine מקצה לאפליקציה
-
אם הפריסה בוצעה בהצלחה, יוצג הטקסט הבא:

העברת תנועה לגרסה חדשה
לבסוף, מפנים את התנועה לגרסה החדשה שנפרסה באמצעות הפקודה הבאה:
gcloud app services set-traffic default --splits VERSION=1
הגרסה החדשה של האפליקציה זמינה עכשיו בכתובת ה-URL הבאה:
https://PROJECT_ID.REGION_ID.r.appspot.com
קריאת יומנים של App Engine
אחרי שפרסתם את אפליקציית Rails, אתם יכולים לקרוא את היומנים. אפשר לקרוא את יומני האפליקציה באמצעות Logs Explorer שנמצא במסוף Google Cloud .
מידע נוסף על קריאת יומנים באמצעות ה-CLI של gcloud
מחיקת משאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחק את הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת גרסה של App Engine
כדי למחוק גרסת אפליקציה:
- במסוף Google Cloud , נכנסים לדף Versions של App Engine.
- מסמנים את התיבה שלצד גרסת האפליקציה שלא מוגדרת כברירת מחדל ושרוצים למחוק.
- כדי למחוק את גרסת האפליקציה, לוחצים על Delete.
מחיקת מכונה של Cloud SQL
כדי למחוק מכונה של Cloud SQL:
- נכנסים לדף Instances במסוף Google Cloud .
- לוחצים על השם של מכונת ה-SQL שרוצים למחוק.
- כדי למחוק את המכונה, לוחצים על Delete ופועלים לפי ההוראות.