Ruby-Laufzeitumgebung

Mit der Ruby-Laufzeit können Sie Ihre Anwendung in App Engine in einer Sandbox-Umgebung ausführen. In diesem Dokument wird die Ruby-Laufzeitumgebung detailliert erläutert, darunter auch die für Ihren Code verfügbaren Header und andere Einzelheiten zur erfolgreichen Bereitstellung Ihrer Anwendung in App Engine.

Geben Sie die Ruby-Laufzeit für App Engine in der Standardumgebung in der app.yaml-Datei an:

runtime: rubyVERSION

Dabei ist VERSION die Ruby-Versionsnummern MAJOR und MINOR. Wenn Sie beispielsweise die neueste Ruby-Version Ruby 3.3 verwenden möchten, geben Sie 33 an.

Weitere unterstützte Ruby-Versionen und die entsprechende Ubuntu-Version für Ihre Ruby-Version finden Sie im Zeitplan für die Laufzeitunterstützung.

Ruby-Version

Die Ruby-Laufzeit verwendet den neuesten stabilen Release der Version, die in der Datei app.yaml angegeben ist. App Engine wird automatisch auf neue Patchrelease-Versionen aktualisiert. Die Nebenversion wird jedoch nicht automatisch aktualisiert.

Beispiel: Ihre Anwendung wird unter Ruby 2.6.0 bereitgestellt und bei einer späteren Bereitstellung automatisch auf Version 2.6.1 aktualisiert, aber nicht automatisch auf Ruby 2.7.

Abhängigkeiten

Weitere Informationen zum Deklarieren und Verwalten von Abhängigkeiten finden Sie unter Abhängigkeiten angeben.

Anwendungsstart

Die Laufzeit startet Ihre Anwendung mit dem in app.yaml definierten entrypoint. Der Einstiegspunkt sollte einen Prozess starten, der auf HTTP-Anfragen an dem von der Umgebungsvariablen PORT definierten Port antwortet. Beispiel:

entrypoint: bundle exec rails server -p $PORT

Die meisten Webanwendungen verwenden einen von Rack unterstützten Webserver wie Puma, Unicorn oder Thin.

Sie müssen den Server als Abhängigkeit in der Konfigurationsdatei Gemfile Ihrer Anwendung hinzufügen. Von der Laufzeit werden alle Abhängigkeiten installiert, bevor der Einstiegspunkt aufgerufen wird.

source "https://rubygems.org"

gem "rack"
gem "puma"

Beispiel für einen Einstiegspunkt unter Verwendung von Puma für eine Rails-Anwendung:

entrypoint: bundle exec rails server Puma -p $PORT

Beispiel für einen Einstiegspunkt unter Verwendung von Puma für eine beliebige Rack-Anwendung:

entrypoint: bundle exec rackup -s Puma -p $PORT

Für Anwendungen, die Anfragen ohne einen Rack-Server verarbeiten können, müssen Sie lediglich ein Ruby-Skript ausführen:

entrypoint: bundle exec ruby app.rb

Umgebungsvariablen

Folgende Umgebungsvariablen werden durch die Laufzeit festgelegt:

Umgebungsvariable Beschreibung
GAE_APPLICATION ID der App Engine-Anwendung. Diese ID hat das Präfix „region code~”, z. B. „e~” für Anwendungen, die in Europa bereitgestellt werden.
GAE_DEPLOYMENT_ID ID der aktuellen Bereitstellung.
GAE_ENV App Engine-Umgebung. Legen Sie standard fest.
GAE_INSTANCE ID der Instanz, auf der Ihr Dienst gerade ausgeführt wird.
GAE_MEMORY_MB Größe des für den Anwendungsprozess verfügbaren Speichers in MB
GAE_RUNTIME Laufzeit, die in der Datei app.yaml angegeben ist.
GAE_SERVICE Dienstname, der in der Datei app.yaml angegeben ist. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt.
GAE_VERSION Aktuelle Versionsbezeichnung Ihres Dienstes.
GOOGLE_CLOUD_PROJECT Google Cloud-Projekt-ID, die der Anwendung zugeordnet ist.
PORT Port, der HTTP-Anfragen empfängt.
NODE_ENV (nur in der Node.js-Laufzeit verfügbar) Erhält den Wert production, wenn der Dienst bereitgestellt wird.

Sie können in der Datei app.yaml weitere Umgebungsvariablen definieren. Die oben angegebenen Werte können aber mit Ausnahme von NODE_ENV nicht überschrieben werden.

HTTPS und Weiterleitungsproxys

App Engine terminiert HTTPS-Verbindungen am Load-Balancer und leitet Anfragen an die Anwendung weiter. Einige Anwendungen müssen die ursprüngliche Anfrage-IP-Adresse und das Protokoll bestimmen. Die IP-Adresse des Nutzers ist im Standardheader X-Forwarded-For verfügbar. Bei Anwendungen, die diese Informationen benötigen, sollte das Web-Framework so konfiguriert werden, dass dem Proxy vertraut wird.

Dateisystem

Die Laufzeit enthält das beschreibbare Verzeichnis /tmp. Alle anderen Verzeichnisse sind schreibgeschützt. Beim Schreiben in /tmp wird Systemspeicher belegt. Weitere Informationen finden Sie in der Dokumentation zu TempDir und TempFile.

Metadatenserver

Jede Instanz einer Anwendung kann mit dem App Engine-Metadatenserver Informationen über die Instanz und das Projekt abfragen.

Sie können auf den Metadatenserver über die folgenden Endpunkte zugreifen:

  • http://metadata
  • http://metadata.google.internal

An den Metadatenserver gesendete Anfragen müssen den Anfrageheader Metadata-Flavor: Google enthalten. Dieser Header gibt an, dass die Anfrage zum Abrufen von Metadatenwerten gesendet wurde.

In der folgenden Tabelle sind die Endpunkte aufgeführt, an die Sie HTTP-Anfragen für bestimmte Metadaten senden können:

Metadatenendpunkt Beschreibung
/computeMetadata/v1/project/numeric-project-id Projektnummer, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/project/project-id Projekt-ID, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/instance/region Region, in der die Instanz ausgeführt wird.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email E-Mail-Adresse des Standarddienstkontos, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/instance/service-accounts/default/ Listet alle Standarddienstkonten für Ihr Projekt auf.
/computeMetadata/v1/instance/service-accounts/default/scopes Listet alle unterstützten Bereiche für die Standarddienstkonten auf.
/computeMetadata/v1/instance/service-accounts/default/token Gibt das Authentifizierungstoken zurück, mit dem Ihre Anwendung gegenüber anderen Google Cloud APIs authentifiziert werden kann.

Wenn Sie z. B. Ihre Projekt-ID abrufen möchten, senden Sie eine Anfrage an http://metadata.google.internal/computeMetadata/v1/project/project-id.