Runtime Ruby

Runtime Ruby adalah stack software yang bertanggung jawab untuk menginstal kode aplikasi dan dependensi Anda, lalu menjalankan aplikasi tersebut di lingkungan fleksibel.

Versi Ruby

Ruby 3.3 menggunakan buildpacks. Untuk mengetahui daftar lengkap versi Ruby yang didukung, dan versi Ubuntu yang sesuai, lihat Jadwal dukungan runtime.

Untuk menggunakan versi Ruby yang didukung, Anda harus:

  • Tentukan versi Ruby di Gemfile Anda.

    RUBY VERSION
      ruby 3.3.x
    
  • Instal gcloud CLI versi 420.0.0 atau yang lebih baru. Anda dapat memperbarui alat CLI dengan menjalankan perintah gcloud components update. Untuk melihat versi yang diinstal, Anda dapat menjalankan perintah gcloud version.

  • Tentukan setelan operating_system di file app.yaml Anda:

      runtime: ruby
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    
  • Jika ingin, Anda dapat menentukan versi penafsir Ruby menggunakan file .ruby-version di direktori aplikasi Anda. Misalnya, 3.3.x

Versi sebelumnya

Untuk menggunakan runtime Ruby versi 3.1 dan yang lebih lama, tentukan versi penafsir Ruby menggunakan file .ruby-version di direktori aplikasi Anda.

Jika file ini ada, runtime akan menginstal Ruby versi yang diminta saat Anda men-deploy aplikasi menggunakan rbenv. Jika versi yang diminta tidak dapat diinstal, App Engine akan menampilkan pesan error selama deployment.

Jika Anda tidak menyediakan file .ruby-version, runtime Ruby akan ditetapkan secara default ke versi 2.7. Perhatikan bahwa versi default dapat berubah kapan saja, jadi sebaiknya aplikasi Anda menentukan versi Ruby.

Dukungan untuk runtime Ruby lainnya

Jika perlu menggunakan versi Ruby yang tidak didukung, Anda dapat membuat runtime kustom dan memilih image dasar yang valid dengan versi Ruby yang Anda butuhkan.

Untuk image dasar yang disediakan Google atau image dasar Docker Ruby, lihat Mem-build runtime kustom.

Dependensi

Runtime mencari file Gemfile dalam direktori sumber aplikasi Anda dan menggunakan Bundler untuk menginstal dependensi apa pun sebelum memulai aplikasi Anda. Untuk informasi selengkapnya tentang mendeklarasikan dan mengelola paket, lihat Menggunakan Library Ruby.

Menggunakan library C dengan Ruby

Untuk library Ruby yang memerlukan ekstensi C, header untuk versi Ruby saat ini dan paket Ubuntu berikut sudah diinstal sebelumnya di sistem.

  • 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

Paket-paket ini memungkinkan penginstalan library Ruby yang paling populer. Jika aplikasi memerlukan dependensi level sistem operasi tambahan, Anda harus menggunakan runtime kustom berdasarkan runtime ini untuk menginstal paket yang sesuai.

Proses mulai aplikasi

Runtime memulai aplikasi Anda menggunakan entrypoint yang ditentukan dalam app.yaml. Titik entri akan memulai proses yang merespons permintaan HTTP di port yang ditentukan oleh variabel lingkungan PORT. Contoh:

entrypoint: bundle exec rails server -p $PORT

Sebagian besar aplikasi web menggunakan server web yang didukung Rack seperti Puma, Unicorn, atau Thin.

Anda harus menambahkan server sebagai dependensi di file konfigurasi Gemfile aplikasi Anda. Runtime akan menginstal semua dependensi sebelum titik entri Anda dipanggil.

source "https://rubygems.org"

gem "rack"
gem "puma"

Contoh titik entri yang menggunakan puma untuk aplikasi Rails:

entrypoint: bundle exec rails server Puma -p $PORT

Contoh titik entri yang menggunakan puma untuk aplikasi Rack apa pun:

entrypoint: bundle exec rackup -s Puma -p $PORT

Untuk aplikasi yang dapat menangani permintaan tanpa server Rack, Anda cukup menjalankan skrip ruby:

entrypoint: bundle exec ruby app.rb

Variabel lingkungan

Variabel lingkungan berikut ditetapkan oleh lingkungan runtime:

Variabel Lingkungan Deskripsi
GAE_INSTANCE Nama instance saat ini.
GAE_MEMORY_MB Jumlah memori yang tersedia untuk proses aplikasi.
GAE_SERVICE Nama layanan yang ditentukan dalam file app.yaml aplikasi Anda, atau jika tidak ada nama layanan yang ditentukan, nama akan ditetapkan ke default.
GAE_VERSION Label versi aplikasi saat ini.
GOOGLE_CLOUD_PROJECT Project ID yang terkait dengan aplikasi Anda, yang terlihat di konsol Google Cloud
PORT Port yang akan menerima permintaan HTTP.
RACK_ENV Tetapkan ke production.
RAILS_ENV Tetapkan ke production.
RAILS_SERVE_STATIC_FILES Tetapkan ke true.

Anda dapat menetapkan variabel lingkungan tambahan dengan app.yaml.

Server metadata

Setiap instance aplikasi Anda dapat menggunakan server metadata Compute Engine untuk mengkueri informasi tentang instance ini, termasuk nama host, alamat IP eksternal, ID instance, metadata kustom, dan informasi akun layanan. Dengan App Engine, Anda tidak dapat menetapkan metadata kustom untuk setiap instance, tetapi Anda dapat menetapkan metadata kustom tingkat project serta membacanya dari instance App Engine dan Compute Engine.

Fungsi contoh ini menggunakan server metadata untuk mendapatkan alamat IP eksternal instance.

require "sinatra"
require "net/http"

get "/" do
  uri = URI.parse(
    "http://metadata.google.internal/computeMetadata/v1" +
    "/instance/network-interfaces/0/access-configs/0/external-ip"
  )

  request = Net::HTTP::Get.new uri.path
  request.add_field "Metadata-Flavor", "Google"

  http = Net::HTTP.new uri.host, uri.port

  response = http.request request

  "External IP: #{response.body}"
end