איך מתחילים לפתח אפליקציות Ruby on Rails שפועלות בסביבה גמישה ב-App Engine. האפליקציות שאתם יוצרים פועלות על אותה תשתית שמפעילה את כל המוצרים של Google, כך שאתם יכולים להיות בטוחים שהן יכולות להתאים את עצמן לכל המשתמשים שלכם, בין אם יש לכם כמה משתמשים או מיליונים.
המדריך הזה מניח שאתם מכירים את פיתוח האתרים ב-Rails. במדריך מוסבר איך להגדיר את Cloud SQL ל-MySQL באפליקציית Rails חדשה. אתם יכולים להשתמש במדריך גם כחומר עזר להגדרת אפליקציות Rails קיימות לשימוש ב-Cloud SQL ל-MySQL.
המדריך הזה תומך ב-Ruby 3.0 ואילך, ודורש את הגרסה הזו.
לפני שמתחילים
- נכנסים לחשבון 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 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
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 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
הכנת Cloud SQL למכונה של MySQL
כדי להגדיר את Cloud SQL למכונה של MySQL בשביל המדריך הזה:
יוצרים מכונה מהדור השני. במדריך הזה, שם המכונה הוא
rails-cloudsql-instance.יוצרים מסד נתונים במכונה. במדריך הזה, השם של מסד הנתונים בסביבת הייצור הוא
cat_list_production.מגדירים סיסמה למשתמש Root במכונה.
הגדרת הסביבה המקומית ל-Rails
כדי להגדיר את הסביבה המקומית למדריך הזה:
מידע נוסף על התקנת Rails ויחסי התלות שלו זמין במדריך הרשמי תחילת העבודה עם Rails.
אחרי שתשלימו את הדרישות המוקדמות, תוכלו ליצור ולפרוס אפליקציית Rails באמצעות Cloud SQL ל-MySQL. בקטעים הבאים מוסבר איך להגדיר את Cloud SQL ל-MySQL, להתחבר אליו ולפרוס אפליקציה.
יצירת אפליקציה חדשה להצגת חתולים
מריצים את הפקודה
rails newכדי ליצור אפליקציית Rails חדשה. האפליקציה הזו מאחסנת רשימה של חתולים ב-Cloud SQL ל-MySQL.rails new cat_sample_appיכול להיות שתצטרכו גם להתקין ספריות mysql ל-mysql gems באמצעות פקודה כמו בדוגמה הבאה:
sudo apt-get install libmysqlclient-devעוברים לספרייה שמכילה את אפליקציית 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 ל-MySQL עם App Engine
Cloud SQL ל-MySQL הוא שירות מנוהל של מסד נתונים, שבעזרתו אפשר ליצור, לתחזק ולנהל מסדי נתונים רלציוניים של MySQL ב- Google Cloud. אתם יכולים להשתמש ב-Cloud SQL באפליקציית Rails כמו בכל מסד נתונים רלציוני אחר.
הגדרת Cloud SQL ל-MySQL
כדי להתחיל להשתמש ב-Cloud SQL עם אפליקציית Rails בסביבת הייצור:
מוסיפים את ה-gems
mysql2ו-appengineלקובץGemfile.bundle add mysql2 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_MYSQL_USERNAME]מייצג את שם המשתמש שלכם ב-MySQL. -
[YOUR_MYSQL_PASSWORD]מייצג את הסיסמה שלכם ל-MySQL. -
[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, בלי להפנות את התנועה מגרסת ברירת המחדל הנוכחית.
מבצעים הידור מראש של נכסי Rails.
bundle exec bin/rails assets:precompileאחרי שהנכסים מסיימים את תהליך הקומפילציה, פורסים גרסה חדשה של האפליקציה.
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.gserviceaccount.com \ --role=roles/editor
העברת מסד הנתונים של Rails
העברות של מסדי נתונים ב-Rails משמשות לעדכון הסכימה של מסד הנתונים בלי להשתמש ישירות בתחביר SQL. בשלב הבא מעבירים את מסד הנתונים של cat_list_production.
ה-gem appengine מספק את המשימה appengine:exec של Rake כדי להריץ פקודה בגרסה האחרונה של האפליקציה שנפרסה בסביבה הגמישה ב-App Engine בסביבת הייצור.
מעבירים את מסד הנתונים
cat_list_productionשל Cloud SQL ל-MySQL בסביבת הייצור.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 ----------כדי לאמת את העברת מסד הנתונים, עוברים אל:
VERSION-dot-PROJECT_ID.appspot.com
אם הפריסה בוצעה בהצלחה, יוצג הטקסט הבא:

העברת תנועה לגרסה חדשה
לבסוף, מפנים את התנועה לגרסה החדשה שנפרסה באמצעות הפקודה הבאה:
gcloud app services set-traffic default --splits VERSION=1
הגרסה החדשה של האפליקציה זמינה עכשיו בכתובת:
https://PROJECT_ID.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 ופועלים לפי ההוראות.