Especificar dependências no Ruby
As funções do Cloud Run escritas em Ruby usam o bundler para acessar as dependências. É possível fazer o download das dependências quando a função é implantada ou empacotada localmente junto com a função.
Cada função precisa fornecer um Gemfile
que especifique a gem
functions_framework
, junto com qualquer outra gem necessária para a função. Gemfile
precisa estar no
mesmo diretório que o arquivo app.rb
que contém o código da função. Além
disso, a função precisa fornecer um arquivo de bloqueio que especifique todas as
dependências transitivas e as respectivas versões. Este arquivo, Gemfile.lock
, também
está localizado no mesmo diretório junto com Gemfile
.
Quando você implanta sua função, as funções do Cloud Run faz o download e instala
as dependências declaradas em Gemfile
e Gemfile.lock
usando bundler
.
O Gemfile
lista os pacotes obrigatórios para a função junto com
as restrições de versão opcionais. Para mais detalhes, consulte a
referência do Gemfile.
Veja abaixo um exemplo de Gemfile
:
source "https://rubygems.org" gem "functions_framework", "~> 0.7" gem "google-cloud-storage", "~> 1.29"
Execute o comando a seguir para instalar a gem functions_framework
e outras
dependências:
bundle install
A Gemfile.lock
é gerada pelo bundler quando ele analisa suas dependências
e congela as respectivas versões de cada gem a ser instalada. Isso garante, por
exemplo, que a função seja implantada com as mesmas versões de dependência que
aquelas usadas nos testes locais. O formato exato de Gemfile.lock
é
particular para o bundler e não pode ser editado manualmente.
Se você já usou o bundler para instalar suas dependências e executar testes
localmente, provavelmente já tem um arquivo Gemfile.lock
. Caso contrário,
gere um executando:
bundle lock
O Functions Framework é uma dependência necessária para todas as funções. Embora as funções do Cloud Functions o instalem em seu nome quando a função é criada, recomendamos que você a inclua como uma dependência explícita para maior clareza.
Se a
função depende de dependências particulares, recomendamos que você
espelhe functions-framework
no registro particular. Inclua o functions-framework
espelhado como uma dependência da sua função para evitar a instalação do
pacote pela Internet pública.
Como empacotar dependências locais
Também é possível empacotar e implantar dependências junto com sua função. Essa abordagem é útil se a dependência não estiver disponível por meio do gerenciador de pacotes rubygems.
Para empacotar uma gem localmente, inclua-a em um diretório na estrutura de diretórios da sua
função e informe o caminho na entrada Gemfile
da dependência. O diretório da
gem precisa incluir um arquivo gemspec
válido, que precisa estar localizado na
hierarquia de diretórios da função para que o código seja implantado com a
função. Por exemplo, é possível usar uma estrutura de diretório 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 esta aparência:
source "https://rubygems.org" gem "functions_framework", "~> 0.7" gem "my_private_gem", path: "./my_private_gem"
Consulte a referência do Gemfile para ver mais discussões sobre como fazer referência a caminhos gem locais.