Environnement d'exécution Ruby

Présentation

L'environnement d'exécution Ruby est la pile logicielle chargée d'installer le code de votre application et ses dépendances, ainsi que d'exécuter votre application. L'environnement d'exécution standard est déclaré dans le fichier app.yaml sous la forme runtime: ruby :

runtime: ruby
env: flex

Les environnements d'exécution flexibles sont créés à l'aide de Docker. L'environnement d'exécution Ruby est basé sur Ubuntu 16.04. Son code source est publiquement accessible sur GitHub.

Interpréteur

Vous pouvez spécifier la version de l'interpréteur Ruby à utiliser en l'indiquant dans un fichier .ruby-version dans le répertoire de votre application. Exemple :

2.4.1

Lorsque ce fichier est présent, l'environnement d'exécution installe la version de Ruby demandée à l'aide de rbenv lors du déploiement de l'application. Si la version demandée ne peut pas être installée, vous recevez un message d'erreur au moment du déploiement.

Si vous ne fournissez pas de fichier .ruby-version, l'environnement d'exécution Ruby installe par défaut une version récente de Ruby 2.6. Notez que la valeur par défaut peut changer à tout moment. Il est donc recommandé de spécifier une version de Ruby.

Dépendances

L'environnement d'exécution recherche un fichier Gemfile dans le répertoire source de votre application et, avant de démarrer cette dernière, il utilise Bundler pour installer les dépendances. Pour en savoir plus sur la déclaration et la gestion des packages, consultez la page Utiliser les bibliothèques Ruby.

Utiliser les bibliothèques C avec Ruby

Pour les bibliothèques Ruby nécessitant des extensions C, les en-têtes correspondant à la version actuelle de Ruby ainsi que les packages Ubuntu suivants sont préinstallés sur le système :

Ces packages permettent d'installer les bibliothèques Ruby les plus populaires. Si votre application nécessite des dépendances supplémentaires au niveau du système d'exploitation, vous devrez installer les packages appropriés dans un environnement d'exécution personnalisé basé sur cet environnement d'exécution.

Démarrage de l'application

L'environnement d'exécution démarre l'application en utilisant le point d'entrée entrypoint défini dans le fichier app.yaml. Ce point d'entrée doit démarrer un processus qui répond aux requêtes HTTP sur le port défini par la variable d'environnement PORT. Exemple :

entrypoint: bundle exec rails server -p $PORT

La plupart des applications Web utilisent un serveur Web compatible avec Rack, tel que Puma, Unicorn ou Thin.

Avant de pouvoir utiliser l'un de ces serveurs, vous devez l'ajouter en tant que dépendance dans le fichier Gemfile de votre application. L'environnement d'exécution s'assure que toutes les dépendances sont installées avant d'appeler votre point d'entrée.

source "https://rubygems.org"

gem "rack"
gem "puma"

Exemple de point d'entrée utilisant puma pour une application Rails :

entrypoint: bundle exec rails server Puma -p $PORT

Exemple de point d'entrée utilisant puma pour une application Rack :

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

Pour les applications capables de traiter des requêtes sans serveur Rack, vous pouvez simplement exécuter un script Ruby :

entrypoint: bundle exec ruby app.rb

Étendre l'environnement d'exécution

Vous pouvez vous servir de l'environnement d'exécution standard Ruby pour créer un environnement d'exécution personnalisé. Les environnements d'exécution personnalisés sont configurés à l'aide de fichiers Dockerfile. Vous pouvez générer un fichier Dockerfile basé sur l'environnement d'exécution Ruby standard à l'aide de gen-config :

gcloud beta app gen-config --custom

Vous pouvez ensuite personnaliser les fichiers Dockerfile et .dockerignore à votre guise. Enfin, vous devez spécifier runtime: custom au lieu de runtime: ruby dans le fichier app.yaml.

Variables d'environnement

Les variables d'environnement suivantes sont définies par l'environnement d'exécution :

Variable d'environnement Description
GAE_INSTANCE Le nom de l'instance actuelle.
GAE_MEMORY_MB La quantité de mémoire disponible pour le processus d'application.
GAE_SERVICE Le nom de service spécifié dans le fichier app.yaml de votre application ou, si aucun nom de service n'est spécifié, il est défini sur default.
GAE_VERSION Le libellé de la version de l'application en cours.
GOOGLE_CLOUD_PROJECT L'ID du projet associé à votre application, visible dans la console Google Cloud Platform.
PORT Le port qui recevra les requêtes HTTP.
RACK_ENV Définie sur production.
RAILS_ENV Définie sur production.
RAILS_SERVE_STATIC_FILES Définie sur true.

Vous pouvez définir des variables d'environnement supplémentaires à l'aide du fichier app.yaml.

Serveur de métadonnées

Chaque instance de votre application peut utiliser le serveur de métadonnées Compute Engine pour rechercher des informations sur l'instance, y compris son nom d'hôte, son adresse IP externe, son ID d'instance, ses métadonnées personnalisées et ses informations de compte de service. App Engine ne vous permet pas de définir des métadonnées personnalisées pour chaque instance, mais vous pouvez définir des métadonnées personnalisées à l'échelle du projet et les lire à partir de vos instances App Engine et Compute Engine.

Cet exemple de fonction utilise le serveur de métadonnées afin d'obtenir l'adresse IP externe de l'instance :

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
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement flexible App Engine pour les documents Ruby