O tempo de execução do Ruby

A sua função do Cloud Run é executada num ambiente que consiste numa versão do sistema operativo com pacotes suplementares, suporte de idiomas e a biblioteca Ruby Functions Framework que suporta e invoca a sua função. Este ambiente é identificado pela versão do idioma e é conhecido como o ID de tempo de execução.

Preparação da função

Pode preparar uma função diretamente a partir da Google Cloud consola ou escrevê-la no seu computador local e carregá-la. Para preparar o seu computador local para o desenvolvimento em Ruby, consulte o artigo Configure um ambiente de desenvolvimento em Ruby.

Imagens base e tempos de execução do Ruby suportados

Tempo de execução ID do ambiente de execução Camadas Imagem base do tempo de execução
Ruby 3.4 ruby34
  • google-22 (predefinição)
  • google-22-full
  • google-22/ruby34
  • google-22-full/ruby34
  • Ruby 3.3 ruby33
  • google-22 (predefinição)
  • google-22-full
  • google-22/ruby33
  • google-22-full/ruby33
  • Ruby 3.2 ruby32
  • google-22 (predefinição)
  • google-22-full
  • google-22/ruby32
  • google-22-full/ruby32
  • Ruby 3.0 ruby30 google-18-full google-18-full/ruby30
    Ruby 2.7 ruby27 google-18-full google-18-full/ruby27
    Ruby 2.6 ruby26 google-18-full google-18-full/ruby26

    Selecione o tempo de execução

    Pode selecionar um dos tempos de execução do Ruby suportados para a sua função durante a implementação.

    Pode selecionar uma versão de tempo de execução através da Google Cloud consola ou da CLI gcloud. Clique no separador para ver instruções sobre como usar a ferramenta da sua escolha:

    gcloud

    Especifique a imagem base do Ruby para a sua função através da flag --base-image ao implementar a função. Por exemplo:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image ruby34
    

    Substituir:

    • FUNCTION com o nome da função que está a implementar. Pode omitir este parâmetro por completo, mas é-lhe pedido o nome se o omitir.

    • FUNCTION_ENTRYPOINT com o ponto de entrada da sua função no código-fonte. Este é o código que o Cloud Run executa quando a sua função é executada. O valor desta flag tem de ser um nome de função ou um nome de classe totalmente qualificado que exista no seu código-fonte.

    Para obter instruções detalhadas sobre a implementação de uma função através da CLI gcloud, consulte o artigo Implemente funções no Cloud Run.

    Consola

    Pode selecionar uma versão de tempo de execução quando cria ou atualiza uma função do Cloud Run na Google Cloud consola. Para ver instruções detalhadas sobre como implementar uma função, consulte o artigo Implemente funções no Cloud Run.

    Para selecionar um tempo de execução na Google Cloud consola quando cria uma função, siga estes passos:

    1. Na Google Cloud consola, aceda à página do Cloud Run:

      Aceda ao Cloud Run

    2. Clique em Escrever uma função.

    3. Na lista Tempo de execução, selecione uma versão do tempo de execução do Ruby.

    4. Clique em Criar e aguarde que o Cloud Run crie o serviço com uma revisão de marcador de posição.

    5. A consola redireciona para o separador Origem, onde pode ver o código-fonte da sua função. Clique em Guardar e voltar a implementar.

    Para obter instruções detalhadas sobre como atualizar a versão do tempo de execução após a implementação da função, consulte o artigo Volte a implementar um novo código-fonte.

    Estrutura do código-fonte

    Para que as funções do Cloud Run encontrem a definição da sua função, o código fonte tem de seguir uma estrutura específica. Consulte o artigo Escreva funções do Cloud Run para mais informações.

    Especifique dependências

    As funções do Cloud Run escritas em Ruby usam o bundler para aceder às dependências.

    O Functions Framework é uma dependência obrigatória para todas as funções. Embora as funções do Cloud Run o instalem 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.

    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, o Cloud Run transfere e instala 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"
    

    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 ver mais informações sobre referências a caminhos de gems locais.