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
e successive sono create utilizzando i buildpack, che richiedono la scelta di un sistema operativo nel fileapp.yaml
. Ad esempio, per utilizzare Ruby 3.3 (anteprima), è necessario specificare Ubuntu 22 come sistema operativo.La versione
3.1
e precedenti sono create utilizzando Docker.
Per l'elenco completo delle versioni Ruby supportate e la versione Ubuntu corrispondente, consulta la pianificazione del supporto di runtime.
Versioni Ruby
Per Ruby versione 3.2 e successive, devi includere le impostazioni runtime_config
e operating_system
nel file app.yaml
per specificare un sistema operativo.
Per utilizzare Ruby 3.3 (anteprima), devi:
Specifica una versione Ruby nel tuo
Gemfile
.RUBY VERSION ruby 3.3.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"
Facoltativamente, puoi specificare una versione dell'interprete Ruby utilizzando un file
.ruby-version
nella directory dell'applicazione. Ad esempio,3.3.x
Versioni precedenti
Per la versione 3.1 e precedenti del runtime Ruby, 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
, il runtime Ruby esegue per impostazione predefinita la
versione 2.7. Tieni presente che l'impostazione predefinita può cambiare in qualsiasi momento, pertanto è consigliabile che la tua app specifichi una versione Ruby.
Supporto per altri runtime Ruby
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
. Per ulteriori informazioni, vedi Runtime personalizzati.
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 la 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 Ruby attuale e i seguenti pacchetti Ubuntu sono preinstallati sul 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ù popolari. Se la tua applicazione richiede dipendenze aggiuntive a livello di sistema operativo, devi utilizzare un runtime personalizzato basato su questo runtime per installare i pacchetti appropriati.
Avvio dell'applicazione
Il runtime avvia l'applicazione utilizzando il entrypoint
definito in
app.yaml
. Il punto di ingresso deve avviare un processo che
risponde 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"
Un esempio di punto di ingresso che utilizza puma per un'applicazione Rails:
entrypoint: bundle exec rails server Puma -p $PORT
Un esempio di punto di ingresso che utilizza 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
Variabili di ambiente
L'ambiente di runtime imposta le seguenti variabili di ambiente:
Variabile di ambiente | Descrizione |
---|---|
GAE_INSTANCE |
Il nome dell'istanza attuale. |
GAE_MEMORY_MB |
La quantità di memoria disponibile per il processo di richiesta. |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml dell'applicazione oppure, se non viene specificato alcun nome di servizio, è impostato su default . |
GAE_VERSION |
L'etichetta della versione dell'applicazione corrente. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto associato alla tua applicazione, visibile nella console Google Cloud |
PORT |
La porta che riceverà le richieste HTTP. |
RACK_ENV |
Impostata su production . |
RAILS_ENV |
Impostata su production . |
RAILS_SERVE_STATIC_FILES |
Impostata su true . |
Puoi impostare altre variabili di ambiente con app.yaml
.
Server metadati
Ogni istanza della tua applicazione può utilizzare il server di metadati di Compute Engine per eseguire query sulle informazioni sull'istanza, tra cui nome host, indirizzo IP esterno, ID istanza, metadati personalizzati e informazioni dell'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, nonché per le istanze che eseguono 3.3 e versioni successive.
Tieni presente che devi aggiornare il file app.yaml
per utilizzare la nuova versione. Consulta Runtime Ruby per ulteriori informazioni sull'utilizzo dei nuovi runtime.