Specifica le dipendenze in Ruby

Le funzioni Cloud Functions scritte in Ruby utilizzano bundler per accedere alle dipendenze. Le dipendenze possono essere scaricate quando viene eseguito il deployment della funzione oppure pacchettizzati localmente insieme alla funzione.

Ogni funzione deve fornire un Gemfile che specifichi la gemma functions_framework, insieme a eventuali gemme aggiuntive necessarie per la funzione. Gemfile deve trovarsi nella stessa directory del file app.rb che contiene il codice della funzione. Inoltre, la funzione deve fornire un lockfile che specifichi tutte le dipendenze transitive e le relative versioni esatte. Anche il file Gemfile.lock si trova nella stessa directory accanto a Gemfile.

Quando esegui il deployment della funzione, Cloud Functions scarica e installa le dipendenze dichiarate in Gemfile e Gemfile.lock utilizzando bundler.

Gemfile elenca i pacchetti richiesti dalla funzione, insieme a eventuali vincoli di versione facoltativi. Per maggiori dettagli, consulta la documentazione di riferimento sui file gem.

Di seguito è riportato un esempio di Gemfile:

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"
gem "google-cloud-storage", "~> 1.29"

Esegui questo comando per installare la gem functions_framework e altre dipendenze:

bundle install

Gemfile.lock viene generato da bundler quando analizza le tue dipendenze e blocca le versioni esatte di ogni gemma da installare. Ciò garantisce, ad esempio, che il deployment della funzione venga eseguito con le stesse versioni delle dipendenze utilizzate nei test locali. Il formato esatto di Gemfile.lock è privato per il bundler e non deve essere modificato manualmente.

Se hai già utilizzato bundler per installare le dipendenze ed eseguire test in locale, probabilmente hai già un file Gemfile.lock presente. In caso contrario, puoi generarne uno eseguendo:

bundle lock

Il framework delle funzioni è una dipendenza obbligatoria per tutte le funzioni. Anche se Cloud Functions la installa per tuo conto al momento della creazione della funzione, ti consigliamo di includerla come dipendenza esplicita per maggiore chiarezza.

Se la tua funzione si basa su dipendenze private, ti consigliamo di eseguire il mirroring di functions-framework nel registro privato. Includi functions-framework con mirroring come dipendenza dalla funzione per evitare di installare il pacchetto dalla rete internet pubblica.

Pacchettizzazione delle dipendenze locali

Puoi anche pacchettizzare ed eseguire il deployment delle dipendenze insieme alla funzione. Questo approccio è utile se la dipendenza non è disponibile tramite il gestore di pacchetti Rubygems.

Per pacchettizzare una gemma localmente, includila in una directory nella struttura della directory della funzione e fornisci il percorso nella voce Gemfile della dipendenza. La directory gem deve includere un file gemspec valido e deve trovarsi all'interno della gerarchia di directory della funzione in modo che il deployment del codice venga eseguito insieme alla funzione. Ad esempio, puoi utilizzare una struttura di directory come la seguente:

myfunction/
├── Gemfile
├── Gemfile.lock
├── app.rb
└── my_private_gem/
    ├── lib/
    |   └── my_private_gem.rb
    └── my_private_gem.gemspec

La voce Gemfile potrebbe avere il seguente aspetto:

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"
gem "my_private_gem", path: "./my_private_gem"

Consulta il riferimento Gemfile per ulteriori discussioni sul riferimento dei percorsi locali delle gemme.