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.