Erfahren Sie, wie Sie eine Beispiel-Rails-Anwendung in Cloud Run bereitstellen und verwaltete Datenbanken, Objektspeicher, verschlüsselte Secrets und Build-Pipelines in serverloses Computing einbinden.
Für die Bereitstellung von Rails-Anwendungen sind mehrere Dienste erforderlich, um ein zusammenhängendes Projekt zu erstellen. In dieser Anleitung wird davon ausgegangen, dass Sie mit der Rails-Webentwicklung vertraut sind.
Für diese Anleitung sind Ruby 3.0 oder höher und Rails 8 oder höher erforderlich.
Ziele
- Cloud SQL-Datenbank erstellen und mit ActiveRecord verbinden
- Secret Manager erstellen und verwenden, um einen Rails-Masterschlüssel sicher zu speichern und darauf zuzugreifen
- Von Nutzern hochgeladene Medien und Dateien in Cloud Storage aus Active Storage hosten
- Mit Cloud Build Build- und Datenbankmigrationen automatisieren
- Rails-Anwendung für Cloud Run bereitstellen
Kosten
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
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.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init - Achten Sie darauf, dass das für diese Anleitung verwendete Konto über ausreichende Berechtigungen verfügt.
Umgebung vorbereiten
In dieser Anleitung werden verschiedene Google Cloud -Dienste verwendet, die die Datenbank, den Medienspeicher und den Secret-Speicher bereitstellen, die die bereitgestellte Rails-Anwendung unterstützen. Bereiten Sie Ihre Umgebung vor, indem Sie eine Region für die Bereitstellung der Dienste konfigurieren und die Rails-App klonen.
Standardprojekt und ‑region festlegen
Legen Sie die Standardprojektkonfiguration für die gcloud CLI mit dem folgenden Befehl fest:
gcloud config set project PROJECT_IDErsetzen Sie
PROJECT_IDdurch Ihre Google CloudProjekt-ID.Region konfigurieren:
export REGION=REGIONErsetzen Sie
REGIONdurch einen geeigneten Speicherort. Zur Steigerung der Effizienz zwischen den Diensten sollten alle Dienste in derselben Region bereitgestellt werden. Weitere Informationen zur nächstgelegenen Region finden Sie unter Produktverfügbarkeit nach Standort.
Rails-Anwendung klonen
Der Code für die Rails-Beispiel-App befindet sich im Repository GoogleCloudPlatform/ruby-docs-samples auf GitHub.
Klonen Sie das Repository:
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.gitGehen Sie zum Verzeichnis mit dem Beispielcode und führen Sie die folgenden Befehle aus, um sicherzustellen, dass die Anwendung ordnungsgemäß mit den erforderlichen Gems und Abhängigkeiten eingerichtet ist:
Linux/macOS
cd ruby-docs-samples/run/rails bundle installWindows
cd ruby-docs-samples\run\rails bundle install
Sicherungsdienste vorbereiten
In dieser Anleitung werden verschiedene Google Cloud -Dienste verwendet, die die Datenbank, den Medienspeicher und den Secret-Speicher bereitstellen, die das bereitgestellte Rails-Projekt unterstützen. Diese Dienste werden in einer bestimmten Region bereitgestellt. Für Effizienz zwischen Diensten ist es am besten, dass alle Dienste in derselben Region bereitgestellt werden. Weitere Informationen zur nächstgelegenen Region finden Sie unter Produktverfügbarkeit nach Standort.
Cloud SQL for PostgreSQL-Instanz einrichten
Rails unterstützt mehrere relationale Datenbanken, von denen mehrere von Cloud SQL angeboten werden. In dieser Anleitung wird PostgreSQL verwendet, eine Open-Source-Datenbank, die häufig von Rails-Anwendungen verwendet wird.
In den folgenden Abschnitten wird das Erstellen einer PostgreSQL-Instanz, einer Datenbank und eines Datenbanknutzers für Ihre Rails-Anwendung beschrieben.
PostgreSQL-Instanz erstellen
Console
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
Klicken Sie auf Instanz erstellen.
Klicken Sie auf PostgreSQL auswählen.
Geben Sie im Feld Instanz-ID einen Namen für die Instanz ein (
INSTANCE_NAME).Geben Sie im Feld Passwort ein Passwort für den Postgres-Nutzer ein.
Übernehmen Sie für die anderen Felder die Standardwerte.
Klicken Sie auf Instanz erstellen.
gcloud
Erstellen Sie die PostgreSQL-Instanz:
gcloud sql instances create INSTANCE_NAME \ --database-version POSTGRES_12 \ --tier db-f1-micro \ --region REGIONDabei gilt:
INSTANCE_NAME: der Name Ihren neuen Cloud SQL-InstanznamenREGION: die Google Cloud -Region
Es dauert einige Minuten, bis die Instanz erstellt und einsatzbereit ist.
Datenbank erstellen
Console
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
Wählen Sie die Instanz INSTANCE_NAME aus.
Wechseln Sie zum Tab Datenbanken.
Klicken Sie auf Datenbank erstellen.
Geben Sie im Dialogfeld Datenbankname
DATABASE_NAMEein.Klicken Sie auf Erstellen.
gcloud
Erstellen Sie die Datenbank in der kürzlich erstellten Instanz:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAMEErsetzen Sie
DATABASE_NAMEdurch einen Namen für die Datenbank in der Instanz.
Nutzer erstellen
Generieren Sie ein zufälliges Passwort für den Datenbanknutzer und schreiben Sie es in eine Datei mit dem Namen dbpassword:
cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1 > dbpassword
Console
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
Wählen Sie die Instanz INSTANCE_NAME aus.
Öffnen Sie den Tab Nutzer.
Klicken Sie auf Nutzerkonto hinzufügen.
Im Dialogfeld Integrierte Authentifizierung:
- Geben Sie den Nutzernamen
DATABASE_USERNAMEein. - Geben Sie den Inhalt der Datei
dbpasswordals PasswortPASSWORDein.
- Geben Sie den Nutzernamen
Klicken Sie auf Add.
gcloud
Erstellen Sie den Nutzer in der kürzlich erstellten Instanz und legen Sie sein Passwort als Inhalt von dbpassword fest:
gcloud sql users create DATABASE_USERNAME \ --instance=INSTANCE_NAME --password=$(cat dbpassword)Ersetzen Sie
DATABASE_USERNAMEdurch einen Namen für den Nutzer in der Instanz.
Artifact Registry-Repository einrichten
Erstellen Sie mit Artifact Registry ein Repository zum Speichern des Container-Images.
Console
Rufen Sie in der Google Cloud Console die Seite Artifact Registry auf.
Klicken Sie auf Repository erstellen.
Geben Sie Folgendes ein:
- Geben Sie unter Name den Namen „cloud-run-source-deploy“ ein.
- Wählen Sie als Format die Option „Docker“ aus.
- Wählen Sie bei Region die Option REGION aus.
Übernehmen Sie für die anderen Felder die Standardwerte.
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie ein Artifact Registry-Repository:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format docker \ --location REGION
Cloud Storage-Bucket einrichten
Sie können statische Inhalte und von Nutzern hochgeladene Medien in Rails mit hoher Verfügbarkeit im Objektspeicher hosten.
Console
- Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
- Klicken Sie auf Erstellen.
- Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
-
Führen Sie im Abschnitt Einstieg die folgenden Schritte aus:
- Geben Sie einen global eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
- So fügen Sie ein Bucket-Label hinzu: Maximieren Sie den Abschnitt Labels (), klicken Sie auf add_box
Label hinzufügen und geben Sie
keyundvaluefür Ihr Label an.
- Wählen Sie für Standort Folgendes aus: us-central1
-
Gehen Sie im Bereich Speicherort für Daten auswählen so vor:
- Wählen Sie im Bereich Standardklasse festlegen die Option Standard aus.
- Wenn Sie den hierarchischen Namespace aktivieren möchten, wählen Sie im Bereich Speicher für datenintensive Arbeitslasten optimieren die Option Hierarchischen Namespace für diesen Bucket aktivieren aus.
- Wählen Sie im Abschnitt Zugriff auf Objekte steuern aus, ob der Bucket Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Zugriffssteuerungsmethode für die Objekte Ihres Buckets aus.
-
Führen Sie im Bereich Auswählen, wie Objektdaten geschützt werden die folgenden Schritte aus:
- Wählen Sie unter Datenschutz die gewünschten Optionen für Ihren Bucket aus.
- Wenn Sie Vorläufiges Löschen aktivieren möchten, klicken Sie das Kästchen Richtlinie für vorläufiges Löschen (zur Datenwiederherstellung) an und geben Sie die Anzahl der Tage an, die Objekte nach dem Löschen beibehalten werden sollen.
- Wenn Sie die Objektversionsverwaltung festlegen möchten, klicken Sie das Kästchen Objektversionsverwaltung (zur Datenwiederherstellung) an und geben Sie die maximale Anzahl von Versionen pro Objekt und die Anzahl der Tage an, nach denen die nicht aktuellen Versionen ablaufen.
- Klicken Sie das Kästchen Aufbewahrung (für Compliance) an, um die Aufbewahrungsrichtlinie für Objekte und Buckets zu aktivieren, und gehen Sie dann so vor:
- Klicken Sie auf das Kästchen Objektaufbewahrung aktivieren, um die Objektaufbewahrungssperre zu aktivieren.
- Wenn Sie Bucket Lock aktivieren möchten, klicken Sie das Kästchen Bucket-Aufbewahrungsrichtlinie festlegen an und wählen Sie eine Zeiteinheit und eine Zeitdauer für die Aufbewahrungsdauer aus.
- Um auszuwählen, wie Ihre Objektdaten verschlüsselt werden, maximieren Sie den Bereich Datenverschlüsselung () und wählen Sie eine Methode für die Datenverschlüsselung aus.
- Wählen Sie unter Datenschutz die gewünschten Optionen für Ihren Bucket aus.
-
Führen Sie im Abschnitt Einstieg die folgenden Schritte aus:
- Klicken Sie auf Erstellen.
gcloud
Cloud Storage-Bucket erstellen Verwenden Sie PROJECT_ID und ein Suffix Ihrer Wahl,
MEDIA_BUCKET_SUFFIX, um einen eindeutigen Cloud Storage-Bucket-Namen zu erstellen. In Cloud Storage müssen Bucket-Namen global eindeutig sein.gcloud storage buckets create gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \ --location=REGION
Nachdem Sie einen Bucket erstellt haben, um die hochgeladenen Bilder zu veröffentlichen, ändern Sie die Berechtigungen von Bildobjekten, damit sie von allen gelesen werden können.
Console
- Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
Klicken Sie in der Liste der Buckets auf den Namen des Buckets, den Sie veröffentlichen möchten.
Wählen Sie oben auf der Seite den Tab Berechtigungen aus.
Klicken Sie auf die Schaltfläche Mitglieder hinzufügen.
Das Dialogfeld Mitglieder hinzufügen wird angezeigt.
Geben Sie im Feld Neue Mitglieder den Wert
allUsersein.Wählen Sie im Drop-down-Menü Rolle auswählen das Untermenü Cloud Storage aus und klicken Sie auf die Option Storage-Objektbetrachter.
Klicken Sie auf Speichern.
Sobald das Objekt öffentlich freigegeben ist, wird in der Spalte für den öffentlichen Zugriff ein Link-Symbol angezeigt. Wenn Sie auf dieses Symbol klicken, erhalten Sie die URL für das Objekt.
Unter Fehlerbehebung erfahren Sie, wie Sie detaillierte Fehlerinformationen zu fehlgeschlagenen Ruby-Vorgängen in der Google Cloud Console abrufen.
gcloud
Verwenden Sie den Befehl
gcloud storage buckets add-iam-policy-binding, um alle Objekte zu veröffentlichen. Verwenden Sie den Wert fürMEDIA_BUCKET_SUFFIX, den Sie beim Erstellen des Buckets verwendet haben.gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID-MEDIA_BUCKET_SUFFIX \ --member=allUsers --role=roles/storage.objectViewer
Secret-Werte im Secret Manager speichern
Nachdem die Sicherungsdienste konfiguriert sind, benötigt Rails sichere Informationen wie Passwörter, um auf diese Dienste zugreifen zu können. Anstatt diese Werte direkt in den Rails-Quellcode einzufügen, werden in dieser Anleitung Rails-Anmeldedaten und Secret Manager verwendet, um diese Informationen sicher zu speichern.
Datei mit verschlüsselten Anmeldedaten und Speicherschlüssel als Secret Manager-Secret erstellen
Rails speichert Secrets in einer verschlüsselten Datei mit dem Namen "config/credentials.yml.enc".
Die Datei kann mit dem lokalen config/master.key oder der Umgebungsvariablen ENV["RAILS_MASTER_KEY"] entschlüsselt werden. In der Datei mit den Anmeldedaten können Sie das Datenbankpasswort der Cloud SQL-Instanz und andere Zugriffsschlüssel für externe APIs speichern.
Sie können diesen Schlüssel sicher im Secret Manager speichern. Anschließend können Sie Cloud Run und Cloud Build Zugriff auf den Schlüssel gewähren, indem Sie Zugriff auf die entsprechenden Dienstkonten gewähren. Dienstkonten werden durch eine E-Mail-Adresse identifiziert, die die Projektnummer enthält.
Generieren Sie die Datei
config/credentials.yml.encmit dem folgenden Befehl:bin/rails credentials:editDer Befehl erstellt einen
config/master.key, wenn kein Masterschlüssel definiert ist, und eineconfig/credentials.yml.enc-Datei, wenn die Datei nicht vorhanden ist. Dadurch wird eine temporäre Datei in Ihrer Standard-$EDITORmit den entschlüsselten Inhalten für die hinzuzufügenden Secrets geöffnet.Kopieren Sie das neu erstellte Passwort für die PostgreSQL-Instanzdatenbank aus der Datei
dbpasswordund fügen Sie es in die Datei mit den Anmeldedaten ein:secret_key_base: GENERATED_VALUE gcp: db_password: PASSWORDSecrets können mit
Rails.application.credentialsaufgerufen werden. Beispiel:Rails.application.credentials.secret_key_basesollte die Basis des geheimen Schlüssels der Anwendung zurückgeben undRails.application.credentials.gcp[:db_password]Ihr Datenbankpasswort zurückgeben.Die
config/credentials/yml.encwird verschlüsselt,config/master.keykann jedoch in Secret Manager gespeichert werden.Console
Rufen Sie in der Google Cloud Console die Seite „Secret Manager“ auf.
Klicken Sie auf Secret erstellen.
Geben Sie im Feld Name einen Namen für das
RAILS_SECRET_NAME-Secret ein.Fügen Sie im Dialogfeld Secret-Wert den Wert "mater.key" in das Feld ein.
Klicken Sie auf Secret erstellen.
Notieren Sie sich die Projektnummer auf der Seite Secret-Detailseite Ihres Secrets:
projects/PROJECTNUM/secrets/RAILS_SECRET_NAME
Klicken Sie im Tab Berechtigungen auf Mitglied hinzufügen.
Geben Sie in das Feld Neue Mitglieder
PROJECTNUM-compute@developer.gserviceaccount.comein und drücken Sie dannEnter.Geben Sie in das Feld Neue Mitglieder
PROJECTNUM@cloudbuild.gserviceaccount.comein und drücken Sie dannEnter.Wählen Sie im Drop-down-Menü Rolle die Option Secret Manager Secret Accessor aus.
Klicken Sie auf Speichern.
gcloud
Erstellen Sie ein neues Secret mit dem Wert von config/master.key:
gcloud secrets create RAILS_SECRET_NAME --data-file config/master.keyGeben Sie für
RAILS_SECRET_NAMEeinen Namen für das neue Secret an.Prüfen Sie Folgendes, um die Erstellung des Secrets zu bestätigen:
gcloud secrets describe RAILS_SECRET_NAME gcloud secrets versions access latest --secret RAILS_SECRET_NAMERufen Sie den Wert der Projektnummer ab:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'Gewähren Sie Zugriff auf das Secret für das Cloud Run-Dienstkonto:
gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \ --member serviceAccount:PROJECTNUM-compute@developer.gserviceaccount.com \ --role roles/secretmanager.secretAccessorErsetzen Sie
PROJECTNUMdurch den Wert für die Projektnummer.Gewähren Sie dem Cloud Build-Dienstkonto Zugriff auf das Secret:
gcloud secrets add-iam-policy-binding RAILS_SECRET_NAME \ --member serviceAccount:PROJECTNUM@cloudbuild.gserviceaccount.com \ --role roles/secretmanager.secretAccessorAchten Sie in der Ausgabe darauf, dass
bindingsdie beiden Dienstkonten als Mitglieder auflistet.
Rails-Anwendung mit Produktionsdatenbank und Speicher verbinden
In dieser Anleitung wird eine PostgreSQL-Instanz als Produktionsdatenbank und Cloud Storage als Speicher-Backend verwendet. Damit Rails eine Verbindung zum neu erstellten Datenbank- und Storage-Bucket herstellen kann, müssen Sie in der Datei .env alle Informationen angeben, die für den Zugriff erforderlich sind. Die Datei .env enthält die Konfiguration für die Umgebungsvariablen der Anwendung. Die Anwendung liest diese Datei mit dem dotenv-Gem. Da die Secrets in credentials.yml.enc und Secret Manager gespeichert sind, muss .env nicht verschlüsselt werden, da es keine vertraulichen Anmeldedaten enthält.
- Konfigurieren Sie die Datei
.env, um die Rails-Anwendung für die Verbindung zu der Datenbank und dem Storage-Bucket zu konfigurieren. Ändern Sie die Konfiguration der Datei
.envso: Verwenden Sie den Wert vonMEDIA_BUCKET_SUFFIX, den Sie beim Erstellen des Buckets verwendet haben.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_SUFFIXDie Rails-Anwendung ist jetzt für die Verwendung von Cloud SQL und Cloud Storage bei der Bereitstellung in Cloud Run eingerichtet.
Anwendung in Cloud Run bereitstellen
Da die Sicherungsdienste nun eingerichtet sind, können Sie die Anwendung jetzt als Cloud Run-Dienst bereitstellen.
Verwenden Sie die bereitgestellte Datei
cloudbuild.yaml, um mithilfe von Cloud Build das Image zu erstellen, die Datenbankmigrationen auszuführen und die statischen Assets zu füllen:gcloud builds submit --config cloudbuild.yaml \ --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAMEErsetzen Sie
SERVICE_NAMEdurch den Namen des Service. Dieser erste Build-Vorgang kann einige Minuten dauern. Wenn das Zeitlimit des Builds überschritten wird, erhöhen Sie das Zeitlimit, indem Sie --timeout=2000s in den Build-Befehl einfügen.Wenn der Build erfolgreich ist, stellen Sie den Cloud Run-Dienst zum ersten Mal bereit. Legen Sie die Dienstregion, das Basis-Image und die verbundene Cloud SQL-Instanz fest:
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-unauthenticatedAus der angezeigten Ausgabe sollte hervorgehen, dass die Bereitstellung erfolgreich war, und es sollte eine Dienst-URL ausgegeben werden.
Rufen Sie die Dienst-URL auf, um sich den bereitgestellten Dienst anzeigen zu lassen.
Wenn die Dienst-URL Cat Fotoalbum anzeigt, befinden Sie sich auf der Startseite der Anwendung. Versuchen Sie, ein neues Foto hochzuladen. Wenn das Foto erfolgreich hochgeladen wurde, wurde die Rails-Anwendung erfolgreich bereitgestellt.
Wenn die Dienst-URL Cat Fotoalbum anzeigt, befinden Sie sich auf der Startseite der Anwendung.
Anwendung aktualisieren
Die ersten Schritte zum Bereitstellen waren zwar komplex, aber die Aktualisierung ist einfacher:
Führen Sie das Build- und Migrationsskript von Cloud Build aus:
gcloud builds submit --config cloudbuild.yaml \ --substitutions _SERVICE_NAME=SERVICE_NAME,_INSTANCE_NAME=INSTANCE_NAME,_REGION=REGION,_SECRET_NAME=RAILS_SECRET_NAMEStellen Sie den Dienst bereit und geben Sie dabei nur die Region und das Image an:
gcloud run deploy SERVICE_NAME \ --region REGION \ --image REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/SERVICE_NAME
Den Code verstehen
Die Rails-Beispiel-App wurde mit Standard-Rails-Befehlen erstellt. Die folgenden Befehle erstellen die Anwendung „cat_album“ und generieren mit dem Gerüstbefehl ein Modell, einen Controller und Ansichten für die Fotoressource:
rails new cat_album
rails generate scaffold Photo caption:text
Datenbankverbindung
Die Datei config/database.yml enthält die Konfiguration, die für den Zugriff auf Ihre Datenbanken in verschiedenen Umgebungen (Entwicklung, Test, Produktion) erforderlich ist. Die Produktionsdatenbank ist beispielsweise so konfiguriert, dass sie in Cloud SQL for PostgreSQL ausgeführt wird. Der Datenbankname und der Nutzername werden über Umgebungsvariablen in der Datei .env festgelegt, während das Datenbankpasswort in der Datei config/credentials.yml.enc gespeichert wird. Hierfür muss RAILS_MASTER_KEY entschlüsselt werden.
Wenn die App in Cloud Run ausgeführt wird (vollständig verwaltet), stellt sie eine Verbindung zur PostgreSQL-Instanz über einen Socket her, der von der Cloud Run-Umgebung bereitgestellt wird. Wenn die Anwendung auf dem lokalen Computer ausgeführt wird, stellt sie über den Cloud SQL Auth-Proxy eine Verbindung zur PostgreSQL-Instanz her.
In der Cloud gespeicherte Medien, die von Nutzern hochgeladen wurden
Rails verwendet Active Storage, um Dateien bei Speicheranbietern hochzuladen. Die Dateien config/storage.yml und config/environments/production.rb geben Cloud Storage als Dienstanbieter in der Produktionsumgebung an.
Automatisierung mit Cloud Build
Die cloudbuild.yaml-Datei führt nicht nur die typischen Image-Build-Schritte aus, mit denen das Container-Image erstellt und in Artifact Registry übertragen wird, sondern auch die Rails-Datenbankmigrationen. Die Migration erfolgt über Cloud Run-Jobs, bei denen ein benutzerdefinierter Befehl verwendet wird, damit der Container die Migration ausführt und nicht der Standard-Webserver.
In dieser Konfiguration werden Substitutionsvariablen verwendet. Wenn Sie die Werte direkt in der Datei ändern, kann das Flag --substitutions zum Zeitpunkt der Migration weggelassen werden.
In dieser Konfiguration werden nur vorhandene Migrationen im Verzeichnis db/migrate angewendet. Informationen zum Erstellen von Migrationsdateien finden Sie unter Active Record Migrations (Aktive Eintragsmigrationen).
Zum Erstellen des Images und Anwenden von Migrationen benötigt die Cloud Build-Konfiguration Zugriff auf das Secret RAILS_MASTER_KEY von Secret Manager. Im Feld availableSecrets werden die Secret-Version und die Umgebungsvariablen festgelegt, die für das Secret verwendet werden sollen. Das Masterschlüssel-Secret wird im Schritt des Build-Images als Argument übergeben und dann beim Erstellen des Images als RAILS_MASTER_KEY im Dockerfile festgelegt.
Wenn Sie die Cloud Build-Konfiguration erweitern möchten, um die Bereitstellung in eine einzige Konfiguration aufzunehmen, ohne zwei Befehle ausführen zu müssen, finden Sie weitere Informationen unter Kontinuierliche Bereitstellung aus Git mit Cloud Build. Dies erfordert die beschriebenen IAM-Änderungen.
Bereinigen
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.