Ruby-Laufzeit

Die Ruby-Laufzeit ist das Softwarepaket, das für die Installation Ihres Anwendungscodes und der Abhängigkeiten sowie für die Ausführung dieser Anwendung in der flexiblen Umgebung verantwortlich ist.

  • Die Version 3.2 wird mit Buildpacks erstellt. Dazu müssen Sie in Ihrer app.yaml-Datei ein Betriebssystem auswählen. Wenn Sie beispielsweise Ruby 3.2 verwenden möchten, müssen Sie Ubuntu 22 als Betriebssystem angeben.

  • Version 3.1 und früher werden mit Docker erstellt.

Eine vollständige Liste der unterstützten Ruby-Versionen und der entsprechenden Ubuntu-Versionen finden Sie im Laufzeitsupportzeitplan.

Interpreter

Neue Laufzeitversionen

Für Version 3.2 müssen Sie die Einstellungen runtime_config und operating_system in der Datei app.yaml einschließen, um ein Betriebssystem anzugeben.

Für die Verwendung von Ruby 3.2 müssen Sie Folgendes tun:

  • Geben Sie eine Ruby-Version im Gemfile an:

    RUBY VERSION
      ruby 3.2.x
    
  • Installieren Sie die CLI-Version 420.0.0 oder höher. Sie können die Befehlszeilentools mit dem Befehl gcloud components update aktualisieren. Zum Aufrufen der installierten Version können Sie den Befehl gcloud version ausführen.

  • Geben Sie die operating_system-Einstellung in der app.yaml-Datei an:

      runtime: ruby
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    

Optional können Sie mit einer .ruby-version-Datei in Ihrem Anwendungsverzeichnis eine Version des Ruby-Interpreters angeben. Beispiel:

3.2.2

Vorgängerversionen

Geben Sie für die Ruby-Laufzeit Version 3.1 und früher eine Version des Ruby-Interpreters über eine .ruby-version-Datei in Ihrem Anwendungsverzeichnis an.

Ist diese Datei vorhanden, installiert die Laufzeit beim Bereitstellen der Anwendung mithilfe von rbenv die angeforderte Ruby-Version. Wenn die angeforderte Version nicht installiert werden kann, zeigt App Engine während der Bereitstellung eine Fehlermeldung an.

Wenn Sie keine .ruby-version-Datei angeben, wird die Ruby-Laufzeit standardmäßig auf Version 2.7 festgelegt. Der Standardwert kann sich jederzeit ändern. Daher sollten Sie in der Anwendung eine Ruby-Version angeben.

Abhängigkeiten

Die Laufzeit sucht im Quellverzeichnis der Anwendung nach einer Gemfile-Datei und verwendet Bundler, um Abhängigkeiten zu installieren, bevor die Anwendung gestartet wird. Weitere Informationen zum Deklarieren und Verwalten von Paketen finden Sie unter Ruby-Bibliotheken verwenden.

C-Bibliotheken mit Ruby verwenden

Für Ruby-Bibliotheken, die C-Erweiterungen benötigen, sind die Header für die aktuelle Ruby-Version und die folgenden Ubuntu-Pakete auf dem System vorinstalliert.

  • autoconf
  • build-essential
  • ca-certificates
  • cmake
  • curl
  • file
  • git
  • imagemagick
  • libcurl3
  • libcurl3-gnutls
  • libcurl4-openssl-dev
  • libffi-dev
  • libgdbm-dev
  • libgit2-dev
  • libgmp-dev
  • libicu-dev
  • libjemalloc-dev
  • libjemalloc1
  • libmagickwand-dev
  • libmysqlclient-dev
  • libncurses5-dev
  • libpq-dev
  • libqdbm-dev
  • libreadline6-dev
  • libsqlite3-dev
  • libssl-dev
  • libxml2-dev
  • libxslt-dev
  • libyaml-dev
  • libz-dev
  • systemtap
  • tzdata

Diese Pakete ermöglichen die Installation der gängigsten Ruby-Bibliotheken. Wenn Ihre Anwendung zusätzliche Abhängigkeiten auf Betriebssystemebene erfordert, verwenden Sie eine auf dieser Laufzeit basierende benutzerdefinierte Laufzeit, um die entsprechenden Pakete zu installieren.

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

Laufzeit erweitern

Mit benutzerdefinierten Laufzeiten können Sie einer Ruby-Anwendung, die in der flexiblen App Engine-Umgebung ausgeführt wird, zusätzliche Funktionen hinzufügen. Zum Konfigurieren einer benutzerdefinierten Laufzeit ersetzen Sie die folgende Zeile in der Datei app.yaml:

runtime: ruby

durch diese Zeile:

runtime: custom

Fügen Sie außerdem die Dateien Dockerfile und .dockerignore in das Verzeichnis ein, das die Datei app.yaml enthält.

Informationen zum Definieren eines Dockerfiles in einer benutzerdefinierten Laufzeit finden Sie in der Dokumentation zu benutzerdefinierten Laufzeiten.

Umgebungsvariablen

Die folgenden Umgebungsvariablen werden durch die Laufzeitumgebung festgelegt:

Umgebungsvariable Beschreibung
GAE_INSTANCE Der Name der aktuellen Instanz
GAE_MEMORY_MB Die Größe des für den Anwendungsprozess verfügbaren Speichers
GAE_SERVICE Der in der Datei app.yaml Ihrer Anwendung angegebene Dienstname. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt.
GAE_VERSION Das Versionslabel der aktuellen Anwendung
GOOGLE_CLOUD_PROJECT Die mit Ihrer Anwendung verknüpfte Projekt-ID, die in der Google Cloud Console angezeigt wird
PORT Der Port, der HTTP-Anfragen empfängt
RACK_ENV Legen Sie production fest.
RAILS_ENV Legen Sie production fest.
RAILS_SERVE_STATIC_FILES Legen Sie true fest.

Sie können mit app.yaml noch weitere Umgebungsvariablen festlegen.

Metadatenserver

Jede Instanz Ihrer Anwendung kann den Compute Engine-Metadatenserver verwenden, um Informationen über die Instanz abzufragen, zum Beispiel ihren Hostnamen, ihre externe IP-Adresse, Instanz-ID, benutzerdefinierte Metadaten und Dienstkontoinformationen. Sie können in App Engine nicht für jede einzelne Instanz benutzerdefinierte Metadaten festlegen. Sie haben aber die Möglichkeit, projektweite benutzerdefinierte Metadaten anzugeben und aus den App Engine- und Compute Engine-Instanzen zu lesen.

Diese Beispielfunktion ruft die externe IP-Adresse für Instanzen mit der Ruby-Laufzeitversion 3.1 und früher sowie für Instanzen mit 3.2 und höher ab. Beachten Sie, dass Sie Ihre app.yaml-Datei aktualisieren müssen, um die neue Version zu verwenden. Weitere Informationen zur Verwendung der neuen Laufzeiten finden Sie unter Ruby-Laufzeit.

require "sinatra"
require "net/http"

get "/" do
  uri = URI.parse(
    "http://metadata.google.internal/computeMetadata/v1" +
    "/instance/network-interfaces/0/access-configs/0/external-ip"
  )

  request = Net::HTTP::Get.new uri.path
  request.add_field "Metadata-Flavor", "Google"

  http = Net::HTTP.new uri.host, uri.port

  response = http.request request

  "External IP: #{response.body}"
end