Especifique dependências em Ruby

As funções do Cloud Run escritas em Ruby usam o bundler para aceder às dependências. As dependências podem ser transferidas quando a sua função é implementada ou embaladas localmente juntamente com a sua função.

Cada função tem de fornecer um Gemfile que especifique o functions_framework gem, juntamente com quaisquer gems adicionais necessárias para a função. Gemfile tem de estar no mesmo diretório que o ficheiro app.rb que contém o código da função. Além disso, a sua função tem de fornecer um ficheiro de bloqueio que especifique todas as dependências transitivas e as respetivas versões exatas. Este ficheiro, Gemfile.lock, também se encontra no mesmo diretório que o ficheiro Gemfile.

Quando implementa a sua função, as funções do Cloud Run transferem e instalam as dependências declaradas nos ficheiros Gemfile e Gemfile.lock através do bundler.

O ficheiro Gemfile lista os pacotes necessários para a sua função, juntamente com quaisquer restrições de versão opcionais. Para mais detalhes, consulte a referência do Gemfile.

Segue-se um exemplo Gemfile:

source "https://rubygems.org"

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

Execute o seguinte comando para instalar a gem functions_framework e outras dependências:

bundle install

O Gemfile.lock é gerado pelo bundler quando analisa as suas dependências e congela as versões exatas de cada gem a ser instalada. Isto garante, por exemplo, que a sua função é implementada com as mesmas versões de dependências que as usadas nos seus testes locais. O formato exato do Gemfile.lock é privado para o agrupador e não se destina a ser editado manualmente.

Se já usou o bundler para instalar as suas dependências e executar testes localmente, é provável que já tenha um ficheiro Gemfile.lock presente. Caso contrário, pode gerar um executando o seguinte comando:

bundle lock

O Functions Framework é uma dependência obrigatória para todas as funções. Embora o Cloud Run Functions o instale em seu nome quando a função é criada, recomendamos que o inclua como uma dependência explícita para maior clareza.

Se a sua função depender de dependências privadas, recomendamos que reflita functions-framework no seu registo privado. Inclua o pacote functions-framework duplicado como uma dependência da sua função para evitar a instalação do pacote a partir da Internet pública.

Empacotar dependências locais

Também pode criar pacotes e implementar dependências juntamente com a sua função. Esta abordagem é útil se a sua dependência não estiver disponível através do gestor de pacotes rubygems.

Para criar um pacote gem localmente, inclua-o num diretório na estrutura de diretórios da sua função e indique o caminho na entrada Gemfile da dependência. O diretório gem tem de incluir um ficheiro gemspec válido e tem de estar localizado na hierarquia de diretórios da função para que o respetivo código seja implementado juntamente com a função. Por exemplo, pode usar uma estrutura de diretórios como a seguinte:

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

A entrada Gemfile pode ter o seguinte aspeto:

source "https://rubygems.org"

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

Consulte a referência Gemfile para mais informações sobre referências a caminhos de gems locais.