Il runtime Ruby è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione e dell'esecuzione dell'applicazione nell'ambiente flessibile.
La versione
3.2
è creata utilizzando buildpacks, che richiede di scegliere un sistema operativo nel fileapp.yaml
. Ad esempio, per utilizzare Ruby 3.2, devi specificare Ubuntu 22 come sistema operativo.Le versioni
3.1
e precedenti sono state create utilizzando Docker.
Per l'elenco completo delle versioni di Ruby supportate e le versioni di Ubuntu corrispondenti, consulta la pianificazione del supporto per l'esecuzione.
Interprete
Nuove versioni di runtime
Per la versione 3.2, devi includere le impostazioni runtime_config
e operating_system
nel file app.yaml
per specificare un sistema operativo.
Per utilizzare Ruby 3.2, devi:
Specifica una versione Ruby in
Gemfile
.RUBY VERSION ruby 3.2.x
Installa gcloud CLI versione 420.0.0 o successiva. Puoi aggiornare gli strumenti dell'interfaccia a riga di comando eseguendo il comando
gcloud components update
. Per visualizzare la versione installata, puoi eseguire il comandogcloud version
.Specifica l'impostazione
operating_system
nel fileapp.yaml
:runtime: ruby env: flex runtime_config: operating_system: "ubuntu22"
Se vuoi, puoi specificare una versione dell'interprete Ruby utilizzando un file .ruby-version
nella directory dell'applicazione. Ad esempio:
Versioni precedenti
Per il runtime Ruby 3.1 e versioni precedenti, specifica una versione dell'interprete Ruby utilizzando un file .ruby-version
nella directory dell'applicazione.
Se questo file è presente, il runtime installa la versione richiesta di Ruby quando esegui il deployment dell'applicazione utilizzando rbenv. Se non è possibile installare la versione richiesta, App Engine mostra un messaggio di errore durante il deployment.
Se non fornisci un file .ruby-version
, per impostazione predefinita il runtime Ruby è 2.7. Tieni presente che il valore predefinito può cambiare in qualsiasi momento, perciò è consigliabile che per la tua app sia specificata una versione Ruby.
Dipendenze
Il runtime cerca un file Gemfile
nella directory di origine dell'applicazione e utilizza Bundler
per installare le dipendenze prima di avviare l'applicazione. Per ulteriori informazioni sulla dichiarazione e sulla gestione dei pacchetti, consulta Utilizzo delle librerie Ruby.
Utilizzo delle librerie C con Ruby
Per le librerie Ruby che richiedono estensioni C, le intestazioni della versione attuale di Ruby e i seguenti pacchetti Ubuntu sono preinstallati nel sistema.
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
Questi pacchetti consentono l'installazione delle librerie Ruby più diffuse. Se la tua applicazione richiede dipendenze a livello di sistema operativo aggiuntive, dovrai utilizzare un runtime personalizzato basato su questo runtime per installare i pacchetti appropriati.
Avvio dell'applicazione
Il runtime avvia l'applicazione utilizzando il criterio entrypoint
definito in app.yaml
. Il punto di ingresso deve avviare un processo in risposta alle richieste HTTP sulla porta definita dalla variabile di ambiente PORT
.
Ad esempio:
entrypoint: bundle exec rails server -p $PORT
La maggior parte delle applicazioni web utilizza un server web supportato da Rack come Puma, Unicorn o Thin.
Devi aggiungere il server come dipendenza nel file di configurazione Gemfile
dell'applicazione. Il runtime installerà tutte le dipendenze prima
della chiamata del punto di ingresso.
source "https://rubygems.org"
gem "rack"
gem "puma"
Ecco un esempio di punto di ingresso in cui viene utilizzato puma per un'applicazione Rails:
entrypoint: bundle exec rails server Puma -p $PORT
Ecco un esempio di punto di ingresso in cui viene utilizzato puma per qualsiasi applicazione Rack:
entrypoint: bundle exec rackup -s Puma -p $PORT
Per le applicazioni in grado di gestire le richieste senza un server rack, è sufficiente eseguire uno script ruby:
entrypoint: bundle exec ruby app.rb
Estendere il runtime
Puoi utilizzare runtime personalizzati per aggiungere ulteriori funzionalità a un'app Ruby in esecuzione nell'ambiente flessibile di App Engine. Per configurare un runtime personalizzato, sostituisci la seguente riga nel file app.yaml
:
runtime: ruby
con questa riga:
runtime: custom
Devi anche aggiungere i file Dockerfile
e .dockerignore
nella stessa directory
che contiene il file app.yaml
.
Consulta la documentazione sui runtime personalizzati per scoprire come definire un Dockerfile in un runtime personalizzato.
Variabili di ambiente
Le seguenti variabili di ambiente sono impostate dall'ambiente di runtime:
Variabile di ambiente | Descrizione |
---|---|
GAE_INSTANCE |
Il nome dell'istanza corrente. |
GAE_MEMORY_MB |
La quantità di memoria disponibile per il processo di applicazione. |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml
della tua applicazione oppure, se non viene specificato alcun nome, il nome è impostato su default . |
GAE_VERSION |
L'etichetta della versione dell'applicazione corrente. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto associato all'applicazione, visibile nella console Google Cloud |
PORT |
La porta che riceverà le richieste HTTP. |
RACK_ENV |
Impostato su production . |
RAILS_ENV |
Impostato su production . |
RAILS_SERVE_STATIC_FILES |
Impostato su true . |
Puoi impostare variabili di ambiente aggiuntive con app.yaml
.
Server metadati
Ogni istanza dell'applicazione può utilizzare il server di metadati di Compute Engine per eseguire query sull'istanza, tra cui nome host, indirizzo IP esterno, ID istanza, metadati personalizzati e informazioni sull'account di servizio. App Engine non consente di impostare metadati personalizzati per ogni istanza, ma puoi impostare metadati personalizzati a livello di progetto e leggerli dalle istanze di App Engine e Compute Engine.
Questa funzione di esempio utilizza il server di metadati per ottenere un indirizzo IP esterno per le istanze che eseguono il runtime Ruby versione 3.1 e precedenti e per le istanze che eseguono la versione 3.2 e successive.
Tieni presente che devi aggiornare il file app.yaml
per utilizzare la nuova versione. Per saperne di più sull'utilizzo dei nuovi runtime, consulta Runtime Ruby.