Cloud SQL für PostgreSQL mit Rails 5 verwenden

Beginnen Sie mit der Entwicklung von Ruby on Rails-Anwendungen, die in der flexiblen Umgebung von App Engine ausgeführt werden. Die von Ihnen erstellten Anwendungen werden auf derselben Infrastruktur ausgeführt, auf der alle Google-Produkte basieren. So können Sie sicher sein, dass sie für alle Nutzer skaliert werden können, unabhängig davon, ob es sich um wenige oder Millionen von ihnen handelt.

In dieser Anleitung wird davon ausgegangen, dass Sie mit der Rails-Webentwicklung vertraut sind. In dieser Anleitung wird Ihnen die Einrichtung von Cloud SQL für PostgreSQL mit einer neuen Rails-Anwendung erklärt. Sie können diese Anleitung auch als Referenz zum Konfigurieren vorhandener Rails-Anwendungen für die Verwendung von Cloud SQL für PostgreSQL verwenden.

Für diese Anleitung ist Ruby 2.6 oder 2.7 erforderlich.

Hinweis

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Enable the Cloud SQL Admin API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Enable the Cloud SQL Admin API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Cloud SQL für PostgreSQL-Instanz vorbereiten

Richten Sie für diese Anleitung eine Cloud SQL für PostgreSQL-Instanz ein.

  1. Erstellen Sie eine PostgreSQL-Instanz. In dieser Anleitung lautet der Name der Instanz rails-cloudsql-instance.

  2. Erstellen Sie eine Datenbank in der Instanz. In dieser Anleitung lautet der Name der Produktionsdatenbank cat_list_production.

  3. Legen Sie das Passwort für den Postgres-Nutzer für die Instanz fest.

Lokale Umgebung für Rails einrichten

So richten Sie eine lokale Umgebung für diese Anleitung ein:

  1. Installieren Sie Ruby 2.6 oder 2.7.

  2. Installieren Sie das Gem Rails 5.

  3. Installieren Sie das Gem Bundler.

Weitere Informationen zur Installation von Rails und dessen Abhängigkeiten finden Sie im offiziellen Leitfaden Erste Schritte mit Rails.

Nachdem Sie die Voraussetzungen erfüllt haben, erstellen Sie eine Schienenanwendung mit Cloud SQL for PostgreSQL und stellen sie bereit. In den folgenden Abschnitten wird gezeigt, wie Sie eine Verbindung zu Cloud SQL for PostgreSQL herstellen und eine Anwendung bereitstellen.

Neue App zum Auflisten von Katzen erstellen

  1. Führen Sie den Befehl rails new aus, um eine neue Rails-Anwendung zu erstellen. Diese Anwendung speichert eine Liste von Katzen in Cloud SQL für PostgreSQL.

    rails new cat_sample_app
    
  2. Wechseln Sie in das Verzeichnis mit der erstellten Rails-Anwendung:

    cd cat_sample_app
    

Anwendung lokal ausführen

So führen Sie die neue Rails-Anwendung lokal auf Ihrem Computer aus:

  1. Installieren Sie die Abhängigkeiten mit Bundler:

    bundle install
    
  2. Starten Sie einen lokalen Webserver:

    bundle exec bin/rails server
    
  3. Rufen Sie in einem Browser http://localhost:3000/ auf.

Die Meldung der Anwendung Yay! Du bist auf Rails! wird auf der Seite angezeigt.

Screenshot of new Rails app running

Gerüst für eine Liste von Katzen generieren

Generieren Sie ein Gerüst für eine Ressource namens Cat, die zum Erstellen einer Liste von Katzen mit ihrem Namen und ihrem Alter verwendet wird.

  1. Generieren Sie das Gerüst:

    bundle exec rails generate scaffold Cat name:string age:integer
    

    Der Befehl generiert ein Modell, einen Controller und Ansichten für die Ressource Cat.

    invoke  active_record
    create    db/migrate/20170804210744_create_cats.rb
    create    app/models/cat.rb
    invoke    rspec
    create      spec/models/cat_spec.rb
    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
    invoke    jbuilder
    create      app/views/cats/index.json.jbuilder
    create      app/views/cats/show.json.jbuilder
    create      app/views/cats/_cat.json.jbuilder
    invoke  assets
    invoke    js
    create      app/assets/javascripts/cats.js
    invoke    scss
    create      app/assets/stylesheets/cats.scss
    invoke  scss
    create    app/assets/stylesheets/scaffolds.scss
    
  2. Öffnen Sie die Datei config/routes.rb, um die folgenden generierten Inhalte zu sehen.

    Rails.application.routes.draw do
      resources :cats
      get 'cats/index'
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    
    end
  3. Fügen Sie der Datei root 'cats#index' hinzu.

    Rails.application.routes.draw do
      resources :cats
      get 'cats/index'
    
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
      root 'cats#index'
    end
  4. Speichern Sie die Datei und schließen Sie sie.

  5. Testen Sie die Rails-App wie zuvor beschrieben.

Cloud SQL für PostgreSQL mit App Engine verwenden

Cloud SQL für PostgreSQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen PostgreSQL-Datenbanken in Google Cloud einrichten, verwalten und verwalten können. Sie können Cloud SQL in einer Rails-Anwendung wie jede andere relationale Datenbank verwenden.

Cloud SQL für PostgreSQL einrichten

So legen Sie die Verwendung von Cloud SQL mit Ihrer Rails-Anwendung in der Produktion fest:

  1. Fügen Sie der Datei Gemfile die Gems pg und appengine hinzu:

    bundle add pg
    bundle add appengine
    

    Die Rails Gemfile enthält die folgenden zusätzlichen gem-Einträge:

    gem "appengine", "~> 0.6"
    gem "pg", "~> 1.2"
  2. Öffnen Sie die Datei config/database.yml, um die Rails-Anwendung für die Verbindung zu Cloud SQL zu konfigurieren. Es werden die folgenden Datenbankeinstellungen für SQLite angezeigt:

    # SQLite version 3.x
    #   gem install sqlite3
    #
    #   Ensure the SQLite 3 gem is defined in your Gemfile
    #   gem 'sqlite3'
    #
    default: &default
      adapter: sqlite3
      pool: 5
      timeout: 5000
    
    development:
      <<: *default
      database: db/development.sqlite3
    
    # Warning: The database defined as "test" will be erased and
    # re-generated from your development database when you run "rake".
    # Do not set this db to the same as development or production.
    test:
      <<: *default
      database: db/test.sqlite3
    
    production:
      <<: *default
      database: db/production.sqlite3
  3. Konfigurieren Sie den Cloud SQL-Instanzverbindungsnamen für die App Engine-Produktionsumgebung.

    1. Rufen Sie den Instanzverbindungsnamen ab:

      gcloud sql instances describe rails-cloudsql-instance
      
    2. Kopieren Sie den Wert neben connectionName.

  4. Ändern Sie die Konfiguration der Produktionsdatenbank database.yml wie folgt:

    production:
      adapter: postgresql
      encoding: unicode
      pool: 5
      timeout: 5000
      username: "[YOUR_POSTGRES_USERNAME]"
      password: "[YOUR_POSTGRES_PASSWORD]"
      database: "cat_list_production"
      host:   "/cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]"

    Dabei gilt:

    • [YOUR_POSTGRES_USERNAME] ist der Nutzername der Cloud SQL for PostgreSQL-Instanz.
    • [YOUR_POSTGRES_PASSWORD] ist das Passwort Ihrer Cloud SQL for PostgreSQL-Instanz.
    • [YOUR_INSTANCE_CONNECTION_NAME] ist der im vorherigen Schritt kopierte Instanzverbindungsname

Die Rails-App ist nun so eingerichtet, dass sie Cloud SQL bei der Bereitstellung in der flexiblen App Engine-Umgebung verwendet.

Anwendung in der flexiblen App Engine-Umgebung bereitstellen

Die flexible App Engine-Umgebung verwendet eine Datei mit dem Namen app.yaml zur Konfiguration der Anwendungsbereitstellung. Wenn diese Datei vorhanden ist, versucht die gcloud-Befehlszeile, die Bereitstellungskonfiguration zu erraten. Es wird allerdings empfohlen, die Datei vorab zu definieren. Dies ermöglicht Ihnen, die erforderlichen Konfigurationseinstellungen für den geheimen Rails-Schlüssel und für Cloud SQL bereitzustellen.

Erstellen Sie eine neue Datei mit dem Namen app.yaml im Stammverzeichnis der Rails-Anwendung und fügen Sie Folgendes hinzu, um die Beispielanwendung für die Bereitstellung in App Engine zu konfigurieren:

entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby

Konfigurieren Sie den geheimen Rails-Schlüssel in der Datei app.yaml

Wenn eine Rails-Anwendung in der production - Umgebung bereitgestellt wird, legen Sie die Umgebungsvariable SECRET_KEY_BASE mit einem geheimen Schlüssel fest, um die Sitzungsdaten der Nutzer zu schützen. Diese Umgebungsvariable wird aus der Datei config/secrets.yml in Ihrer Rails-Anwendung gelesen.

  1. Erzeugen Sie einen neuen geheimen Schlüssel.

    bundle exec bin/rails secret
    
  2. Kopieren Sie den generierten geheimen Schlüssel.

  3. .ffnen Sie die zuvor erstellte Datei app.yaml und fügen Sie den Abschnitt env_variables hinzu. env_variables definiert Umgebungsvariablen in der flexiblen App Engine-Umgebung. Die Datei app.yaml sollte ähnlich wie im folgenden Beispiel aussehen, wobei [SECRET_KEY] durch Ihren geheimen Schlüssel ersetzt wird.

    entrypoint: bundle exec rackup --port $PORT
    env: flex
    runtime: ruby
    
    env_variables:
      SECRET_KEY_BASE: [SECRET_KEY]

Konfigurieren Sie die Cloud SQL-Instanz in der Datei app.yaml

Konfigurieren Sie als Nächstes die flexible App Engine-Umgebung für die Verwendung einer bestimmten Cloud SQL-Instanz, indem Sie den Verbindungsnamen der Cloud SQL-Instanz in der app.yaml - Konfigurationsdatei angeben.

  1. Öffnen Sie die Datei app.yaml und fügen Sie einen neuen Abschnitt mit dem Namen beta_settings hinzu.

  2. Definieren Sie einen verschachtelten Parameter cloud_sql_instances mit dem Instanzverbindungsnamen als Wert.

    app.yaml sollte in etwa so aussehen:

    entrypoint: bundle exec rackup --port $PORT
    env: flex
    runtime: ruby
    
    env_variables:
      SECRET_KEY_BASE: [SECRET_KEY]
    
    beta_settings:
      cloud_sql_instances: [YOUR_INSTANCE_CONNECTION_NAME]

Anwendung in einer flexiblen App Engine-Umgebung erstellen

Wenn Sie zum ersten Mal eine Anwendung bereitstellen, müssen Sie eine Anwendung in der flexiblen App Engine-Umgebung erstellen und die Region auswählen, in der Sie die Rails-Anwendung ausführen möchten.

  1. Erstellen Sie eine App Engine-Anwendung:

    gcloud app create
    
  2. Wählen Sie eine Region aus, die die flexible App Engine-Umgebung für Ruby-Anwendungen unterstützt. Weitere Informationen finden Sie unter Regionen und Zonen.

Neue Version bereitstellen

Als Nächstes stellen Sie mit dem folgenden Befehl eine neue Version der Rails-Anwendung bereit, die in der Datei app.yaml beschrieben wird, ohne den Traffic von der aktuellen Standardbereitstellungsversion weiterzuleiten:

gcloud app deploy --no-promote

Es kann einige Minuten dauern, bis die Bereitstellung abgeschlossen ist. Warten Sie, bis die erfolgreiche Bereitstellung angezeigt wird. Bereitgestellte Versionen werden in der App Engine-Versionsliste aufgeführt.

Wenn Sie nach dem Bereitstellen der neuen Version versuchen, auf diese neue Version zuzugreifen, wird die folgende Fehlermeldung angezeigt, da die Datenbank nicht migriert wurde.

Screenshot der Fehlermeldung der neuen Rails-Anwendung

Erteilen Sie die erforderliche Berechtigung für das Gem appengine

Als Nächstes gewähren Sie Zugriff auf das Cloudbuild-Dienstkonto, um mit dem Gem appengine Migrationen von Produktionsdatenbanken auszuführen.

  1. Listen Sie die verfügbaren Projekte auf:

    gcloud projects list
    
  2. Suchen Sie in der Ausgabe das Projekt, das Sie zur Bereitstellung der Anwendung verwenden möchten, und kopieren Sie die Projektnummer.

  3. Fügen Sie der Projekt-IAM-Richtlinie ein neues Mitglied für die Rolle roles/editor hinzu, um Datenbankmigrationen auszuführen. Ersetzen Sie [YOUR-PROJECT-ID] durch Ihre Google Cloud-Projekt-ID und [PROJECT_NUMBER] durch die Projektnummer, die Sie im vorherigen Schritt kopiert haben.

    gcloud projects add-iam-policy-binding [YOUR-PROJECT-ID] \
      --member=serviceAccount:[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com \
      --role=roles/editor
    

Rails-Datenbank migrieren

Mit Rails-Datenbankmigrationen kann das Schema Ihrer Datenbank ohne SQL-Syntax direkt aktualisiert werden. Als Nächstes migrieren Sie Ihre cat_list_production - Datenbank.

Das Gem appengine stellt die Rake-Aufgabe appengine:exec bereit, um einen Befehl für die neueste bereitgestellte Version Ihrer Anwendung in der flexiblen App Engine-Produktionsumgebung auszuführen.

  1. Migrieren Sie die Cloud SQL für PostgreSQL-Datenbank cat_list_production in der Produktion:

    bundle exec rake appengine:exec -- bundle exec rake db:migrate
    

    Die Ausgabe sollte etwa so aussehen:

    ---------- EXECUTE COMMAND ----------
    bundle exec rake db:migrate
    Debuggee gcp:787021104993:8dae9032f8b02004 successfully registered
    == 20170804210744 CreateCats: migrating =======================================
    -- create_table(:cats)
       -> 0.0219s
    == 20170804210744 CreateCats: migrated (0.0220s) ==============================
    
    ---------- CLEANUP ----------
    
  2. Geben Sie zur Überprüfung der Datenbankmigration die folgende URL in Ihren Browser ein:

    https://VERSION_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com

    Ersetzen Sie Folgendes:

    • VERSION_ID: Die neue Version der Anwendung, die Sie zuvor bereitgestellt haben. Verwenden Sie gcloud app versions list, um eine Liste der Versionen abzurufen. Der letzte Eintrag der Standarddienstversion ist die aktuelle Bereitstellung.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID
    • REGION_ID: Ein Code, den App Engine Ihrer Anwendung zuweist

Bei einer erfolgreichen Bereitstellung wird Folgendes angezeigt:

Screenshot of new Rails app running

Traffic zu neuer Version migrieren

Abschließend können Sie mithilfe des folgenden Befehls den Traffic zur neu erstellten Version umleiten:

gcloud app services set-traffic default --splits [YOUR-VERSION]=1

Die neue Version der Anwendung kann jetzt über die folgende URL aufgerufen werden:

https://PROJECT_ID.REGION_ID.r.appspot.com

App Engine-Logs aufrufen

Wenn Sie nach der Erstellung der Rails-Anwendung die Logs aufrufen möchten, Die Anwendungslogs können Sie mit dem Log-Explorer in der Google Cloud Console lesen.

Weitere Informationen zum Lesen von Logs mit der gcloud-Befehlszeile.

Ressourcen bereinigen

Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

App Engine-Version löschen

So löschen Sie eine Anwendungsversion:

  1. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  3. Klicken Sie zum Löschen der Anwendungsversion auf Löschen.

Cloud SQL-Instanz löschen

So löschen Sie eine Cloud SQL-Instanz:

  1. In the Google Cloud console, go to the Instances page.

    Go to Instances

  2. Click the name of the SQL instance you that want to delete.
  3. To delete the instance, click Delete, and then follow the instructions.

Nächste Schritte