Especificar dependencias en Ruby

Las funciones de Cloud Run escritas en Ruby usan bundler para acceder a las dependencias. Las dependencias se pueden descargar cuando se implementa la función o se pueden empaquetar de forma local junto con la función.

Cada función debe proporcionar un Gemfile que especifique la gema functions_framework, así como cualquier otra gema que necesite la función. Gemfile debe estar en el mismo directorio que el archivo app.rb que contiene el código de la función. Además, tu función debe proporcionar un archivo de bloqueo que especifique todas las dependencias transitivas y sus versiones exactas. Este archivo, Gemfile.lock, también se encuentra en el mismo directorio que Gemfile.

Cuando despliegas tu función, Cloud Run Functions descarga e instala las dependencias declaradas en Gemfile y Gemfile.lock mediante bundler.

El archivo Gemfile muestra los paquetes que necesita tu función, así como las restricciones de versión opcionales. Para obtener más información, consulta la referencia de Gemfile.

A continuación, se muestra un ejemplo de Gemfile:

source "https://rubygems.org"

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

Ejecuta el siguiente comando para instalar la gema functions_framework y otras dependencias:

bundle install

El archivo Gemfile.lock se genera cuando bundler analiza tus dependencias y congela las versiones exactas de cada gem que se va a instalar. De esta forma, te aseguras de que tu función se implemente con las mismas versiones de las dependencias que las que se usan en tus pruebas locales. El formato exacto de Gemfile.lock es privado para el empaquetador y no se debe editar manualmente.

Si ya has usado Bundler para instalar tus dependencias y ejecutar pruebas localmente, probablemente ya tengas un archivo Gemfile.lock. Si no es así, puedes generar uno ejecutando el siguiente comando:

bundle lock

El Functions Framework es una dependencia obligatoria para todas las funciones. Aunque Cloud Run Functions lo instala en tu nombre cuando se crea la función, te recomendamos que lo incluyas como dependencia explícita para mayor claridad.

Si tu función depende de dependencias privadas, te recomendamos que hagas una réplica de functions-framework en tu registro privado. Incluye functions-framework como dependencia de tu función para evitar instalar el paquete desde Internet.

Empaquetar dependencias locales

También puedes empaquetar e implementar dependencias junto con tu función. Este método es útil si tu dependencia no está disponible a través del gestor de paquetes rubygems.

Para empaquetar una gema de forma local, inclúyela en un directorio de la estructura de directorios de tu función y proporciona la ruta en la entrada Gemfile de la dependencia. El directorio gem debe incluir un archivo gemspec válido y debe estar ubicado en la jerarquía de directorios de la función para que su código se implemente junto con la función. Por ejemplo, puedes usar una estructura de directorios como la siguiente:

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

La entrada Gemfile podría tener este aspecto:

source "https://rubygems.org"

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

Consulta la referencia de Gemfile para obtener más información sobre cómo hacer referencia a rutas de gemas locales.