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.