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 3.2 dibuat menggunakan buildpack, yang mengharuskan Anda memilih sistem operasi di file app.yaml. Misalnya, untuk menggunakan Ruby 3.2, Anda harus menentukan Ubuntu 22 sebagai sistem operasi.

  • Versi 3.1 dan yang lebih lama dibangun menggunakan Docker.

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

Penafsir

Versi runtime baru

Untuk versi 3.2, Anda harus menyertakan setelan runtime_config dan operating_system dalam file app.yaml untuk menentukan sistem operasi.

Untuk menggunakan Ruby 3.2, Anda harus:

  • Tentukan versi Ruby di Gemfile Anda.

    RUBY VERSION
      ruby 3.2.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.2.2

Versi sebelumnya

Untuk 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.

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 pada 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

Memperpanjang runtime

Anda dapat menggunakan runtime kustom untuk menambahkan fungsi lain ke aplikasi Ruby yang berjalan di lingkungan fleksibel App Engine. Untuk mengonfigurasi runtime kustom, ganti baris berikut di file app.yaml Anda:

runtime: ruby

dengan baris ini:

runtime: custom

Anda juga harus menambahkan file Dockerfile dan .dockerignore dalam direktori yang sama yang berisi file app.yaml.

Buka dokumentasi Runtime kustom untuk mempelajari cara menentukan Dockerfile dalam runtime kustom.

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. App Engine tidak mengizinkan Anda 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 untuk instance yang menjalankan runtime Ruby versi 3.1 dan yang lebih lama, serta untuk instance yang menjalankan versi 3.2 dan yang lebih baru. Perlu diperhatikan bahwa Anda harus mengupdate file app.yaml untuk menggunakan versi baru. Lihat runtime Ruby untuk mengetahui informasi selengkapnya tentang cara menggunakan runtime baru.

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