Ruby 런타임은 애플리케이션 코드 및 종속 항목을 설치한 후 가변형 환경에서 해당 애플리케이션을 실행하는 소프트웨어 스택입니다.
Ruby 버전
Ruby 3.3은 빌드팩을 사용합니다. 지원되는 Ruby 버전의 전체 목록과 해당 Ubuntu 버전은 런타임 지원 일정을 참조하세요.
지원되는 Ruby 버전을 사용하려면 다음을 수행해야 합니다.
Gemfile
에 Ruby 버전을 지정합니다.RUBY VERSION ruby 3.3.x
gcloud CLI 버전 420.0.0 이상을 설치합니다.
gcloud components update
명령어를 실행하여 CLI 도구를 업데이트할 수 있습니다. 설치된 버전을 보려면gcloud version
명령어를 실행하면 됩니다.app.yaml
파일에서operating_system
설정을 지정합니다.runtime: ruby env: flex runtime_config: operating_system: "ubuntu22"
선택 사항으로 애플리케이션 디렉터리에 있는
.ruby-version
파일을 사용하여 Ruby 인터프리터의 버전을 지정할 수 있습니다. 예를 들면3.3.x
입니다.
이전 버전
Ruby 런타임 버전 3.1 이하를 사용하려면 애플리케이션 디렉터리의 .ruby-version
파일을 사용하여 Ruby 인터프리터 버전을 지정합니다.
이 파일이 있으면 애플리케이션을 배포할 때 런타임에서 rbenv를 사용하여 요청되는 Ruby 버전을 설치합니다. 요청되는 버전을 설치할 수 없을 경우 App Engine은 배포 중에 오류 메시지를 표시합니다.
.ruby-version
파일을 제공하지 않으면 Ruby 런타임은 기본적으로 버전 2.7로 설정됩니다. 기본값은 언제든지 변경될 수 있으므로 앱에서 Ruby 버전을 지정하는 것이 좋습니다.
다른 Ruby 런타임 지원
지원되지 않는 Ruby 버전을 사용해야 하는 경우에는 커스텀 런타임을 만들고 필요한 Ruby 버전의 유효한 기본 이미지를 선택하면 됩니다.
Google에서 제공하는 기본 이미지나 Docker Ruby 기본 이미지는 커스텀 런타임 빌드를 참조하세요.
종속 항목
런타임에서는 애플리케이션 소스 디렉터리에서 Gemfile
파일을 찾고 Bundler
를 사용하여 애플리케이션을 시작하기 전에 종속 항목을 설치합니다. 패키지를 선언하고 관리하는 방법에 대한 자세한 내용은 Ruby 라이브러리 사용을 참조하세요.
Ruby를 통한 C 라이브러리 사용
C 확장을 요구하는 Ruby 라이브러리의 경우 현재 Ruby 버전의 헤더와 다음 Ubuntu 패키지가 시스템에 사전 설치됩니다.
autoconf
build-essential
ca-certificates
cmake
curl
file
git
imagemagick
libcurl3
libcurl3-gnutls
libcurl4-openssl-dev
libffi-dev
libgdbm-dev
libgit2-dev
libgmp-dev
libicu-dev
libjemalloc-dev
libjemalloc1
libmagickwand-dev
libmysqlclient-dev
libncurses5-dev
libpq-dev
libqdbm-dev
libreadline6-dev
libsqlite3-dev
libssl-dev
libxml2-dev
libxslt-dev
libyaml-dev
libz-dev
systemtap
tzdata
이 패키지가 있어야 주로 많이 사용되는 Ruby 라이브러리의 설치가 가능합니다. 추가로 운영체제 수준의 종속 항목이 필요한 애플리케이션인 경우 이 런타임을 기반으로 커스텀 런타임을 사용해 적절한 패키지를 설치해야 합니다.
애플리케이션 시작
런타임은 app.yaml
에서 정의된 entrypoint
를 사용하여 애플리케이션을 시작합니다. 이 진입점에서 환경 변수 PORT
로 정의된 포트에서 HTTP 요청에 응답하는 프로세스를 시작할 것입니다.
예를 들면 다음과 같습니다.
entrypoint: bundle exec rails server -p $PORT
대부분의 웹 애플리케이션에서는 Puma, Unicorn, Thin과 같은 Rack 지원 웹 서버를 사용합니다.
서버를 애플리케이션의 Gemfile
구성 파일에 종속 항목으로 추가해야 합니다. 런타임은 진입점을 호출하기 전에 모든 종속 항목을 설치합니다.
source "https://rubygems.org"
gem "rack"
gem "puma"
Rails 애플리케이션에 puma를 사용하는 진입점의 예:
entrypoint: bundle exec rails server Puma -p $PORT
Rack 애플리케이션에 puma를 사용하는 진입점의 예:
entrypoint: bundle exec rackup -s Puma -p $PORT
Rack 서버 없이 요청을 처리할 수 있는 애플리케이션에서는 ruby 스크립트만 실행하면 됩니다.
entrypoint: bundle exec ruby app.rb
환경 변수
런타임 환경에서 설정되는 환경 변수는 다음과 같습니다.
환경 변수 | 설명 |
---|---|
GAE_INSTANCE |
현재 인스턴스의 이름입니다. |
GAE_MEMORY_MB |
애플리케이션 프로세스에서 사용할 수 있는 메모리 양입니다. |
GAE_SERVICE |
애플리케이션의 app.yaml 파일에 지정된 서비스 이름이거나 서비스 이름이 지정되지 않은 경우 default 로 설정됩니다. |
GAE_VERSION |
현재 애플리케이션의 버전 라벨입니다. |
GOOGLE_CLOUD_PROJECT |
애플리케이션과 연결된 프로젝트 ID로, Google Cloud 콘솔에 표시됩니다. |
PORT |
HTTP 요청을 수신할 포트 |
RACK_ENV |
production 로 설정합니다. |
RAILS_ENV |
production 로 설정합니다. |
RAILS_SERVE_STATIC_FILES |
true 로 설정합니다. |
app.yaml
로 추가 환경 변수를 설정할 수 있습니다.
메타데이터 서버
애플리케이션의 각 인스턴스에서 Compute Engine 메타데이터 서버를 사용하여 호스트 이름, 외부 IP 주소, 인스턴스 ID, 커스텀 메타데이터, 서비스 계정 정보를 포함한 인스턴스 관련 정보를 쿼리할 수 있습니다. App Engine에서는 인스턴스마다 커스텀 메타데이터를 설정할 수 없지만 프로젝트 전체의 커스텀 메타데이터를 설정한 후 App Engine 및 Compute Engine 인스턴스에서 읽을 수 있습니다.
이 예시 함수는 메타데이터 서버를 사용하여 인스턴스의 외부 IP 주소를 가져옵니다.