Как написано в документации Google здесь и здесь
Я использую последнюю версию Ruby, доступную в движке приложений.
Мой файл worker.yml начинается так:
runtime: ruby33
env: flex
service: default
entrypoint: bundle exec sidekiq
resources:
cpu: 2
memory_gb: 1.6
disk_size_gb: 10
Мой Gemfile начинается так:
source 'https://rubygems.org'
ruby "3.3.1"
Мой Gemfile.lock заканчивается так:
RUBY VERSION
ruby 3.3.1p55
BUNDLED WITH
2.3.26
Мой Dockerfile начинается так:
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.3.1
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base
Мой cloudbuild.yaml выглядит так
#First I build the image:
- id: "Build worker"
name: "gcr.io/cloud-builders/docker"
script: |
#!/usr/bin/env bash
docker build --target worker -t $_IMAGE_URL .
#Then I deploy it:
- id: "Launch worker"
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:alpine'
script: |
#!/usr/bin/env bash
gcloud app deploy worker.yaml --image-url=$_IMAGE_URL --quiet
но при развертывании я получаю эту ошибку:
Шаг 13. «Запуск рабочего процесса»: ОШИБКА: (gcloud.app.deploy) INVALID_ARGUMENT: обнаружены ошибки при проверке среды выполнения. Срок поддержки вашей рабочей версии Ruby33 истек. Пожалуйста, обновите среду выполнения до последней доступной версии.
Я понятия не имею, как это исправить. Вы можете помочь мне?
Попробуйте снова развернуть свой сервис, используя флаг --verbosity=debug
, и посмотрите результат. Также убедитесь, что вы используете последнюю версию Google Cloud SDK.
Я не уверен, имеет ли это значение, поскольку я этим не пользуюсь, но ruby:3.3.1-slim
основан на Debian 12.6 «Книжный червь», но тогда вы показываете совместимость с Ubuntu 22.04 (Jammy Jellyfish).
Если вы используете App Engine Flex, посмотрите на гибкую страницу (замените «стандартный» на «гибкий» в URL-адресе ваших ссылок). И попробуйте еще раз: cloud.google.com/appengine/docs/flexible/ruby/runtime При этом для запуска контейнера в большом масштабе Cloud Run — гораздо лучшее место, чем App Engine flex.
@guillaumeblaquiere Конечно. Но запускать процесс, который не отвечает на HTTP-запросы в Cloud Run, слишком сложно.
Похоже, способ обработки файла yaml движком приложения немного изменился в период с 4 июля 2024 г. по 8 августа 2024 г.
Теперь runtime_config.operating_system
ДОЛЖНО быть определено, иначе произойдет сбой с неясной ошибкой INVALID_ARGUMENT: Error(s) encountered validating runtime. Your runtime version for ...
Я исправил эту проблему, добавив это в свой worker.yml
файл:
runtime: ruby
env: flex
service: default
entrypoint: bundle exec sidekiq
runtime_config:
operating_system: "ubuntu22" # <-- FIX
#...
Я не вижу операционную систему в вашем
worker.yaml
файле? Также не рекомендуется специально добавлять номер версии среды выполнения Ruby. Также я попытался развернуть простоеHello World
приложение, следуя этому Документу, и оно было успешно развернуто без каких-либо ошибок.