Ruby on Rails 8: Fitur Baru dan Panduan Migrasi Lengkap 2026
Rails 8 memperkenalkan Solid Trifecta, autentikasi bawaan, Kamal 2, dan Propshaft. Panduan lengkap dengan contoh kode serta langkah migrasi dari Rails 7.

Ruby on Rails 8 menandai babak baru dalam evolusi framework yang telah mendefinisikan ulang pengembangan web sejak 2004. Dirilis pada November 2024 dan diperkuat dengan Rails 8.1 pada Oktober 2025, siklus versi ini menghilangkan sejumlah dependensi eksternal yang selama bertahun-tahun membebani arsitektur produksi. Redis, Sprockets, Capistrano -- semuanya kini menjadi opsional berkat alternatif terintegrasi yang didukung langsung oleh basis data relasional. Perubahan fundamental ini menyederhanakan deployment secara signifikan, memangkas biaya infrastruktur, dan menurunkan hambatan teknis bagi proyek berskala menengah.
Rails 8 menggantikan Redis dengan Solid Trifecta (Solid Queue, Solid Cache, Solid Cable), menyertakan generator autentikasi bawaan, mengadopsi Propshaft sebagai asset pipeline default, serta mengintegrasikan Kamal 2 untuk deployment tanpa downtime. Ruby 3.2 atau versi yang lebih baru merupakan persyaratan minimum.
Solid Trifecta: Infrastruktur Berbasis Basis Data
Sebelum Rails 8, setiap aplikasi produksi yang serius bergantung pada Redis untuk tiga fungsi kritis: background jobs, caching, dan pub/sub WebSocket. Solid Trifecta menggantikan ketiga komponen tersebut dengan adapter yang kompatibel dengan PostgreSQL, MySQL, dan SQLite, dikendalikan langsung oleh basis data relasional yang sudah ada.
Keuntungan operasional yang diperoleh bersifat langsung: tidak perlu lagi menyediakan, memantau, dan memelihara instance Redis terpisah. Kompromi terletak pada performa mentah -- Redis tetap lebih cepat dalam skenario throughput sangat tinggi. Namun untuk sebagian besar aplikasi, adapter berbasis basis data menawarkan performa yang lebih dari memadai. Basecamp, aplikasi andalan 37signals, menjalankan Solid Cache sebesar 10 TB di lingkungan produksi dengan retensi 60 hari.
Solid Queue: Background Jobs Tanpa Redis
Solid Queue menggantikan Sidekiq, Resque, atau Delayed Job sebagai backend Active Job yang didukung basis data. Sistem ini memanfaatkan FOR UPDATE SKIP LOCKED pada PostgreSQL 9.5+ dan MySQL 8.0+, dengan mekanisme fallback untuk SQLite.
# config/environments/production.rb
config.active_job.queue_adapter = :solid_queue
# config/solid_queue.yml
production:
dispatchers:
- polling_interval: 1
batch_size: 500
workers:
- queues: "*"
threads: 5
processes: 2
polling_interval: 0.1Plugin Puma memungkinkan Solid Queue berjalan bersamaan dengan web server di lingkungan development, sehingga tidak perlu menjalankan proses terpisah:
# config/puma.rb
plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"] || Rails.env.development?Solid Queue mendukung recurring jobs, concurrency controls, serta fitur-fitur lanjutan seperti jeda dan lanjutkan per antrian. Untuk aplikasi yang memproses kurang dari 10.000 job per menit, sistem ini mampu menangani beban tanpa kendala.
Solid Cache dan Solid Cable
Solid Cache menyimpan fragment HTML yang di-cache ke dalam basis data alih-alih Memcached atau Redis. Penyimpanan berbasis disk (SSD/NVMe) memiliki biaya yang jauh lebih rendah dibandingkan RAM, sehingga memungkinkan pool cache yang jauh lebih besar dengan durasi retensi yang lebih panjang.
# config/environments/production.rb
config.cache_store = :solid_cache_storeSolid Cable menggantikan adapter pub/sub Redis pada Action Cable. Pesan WebSocket ditulis ke dalam tabel dan di-poll setiap 100 ms secara default. Hasilnya adalah komunikasi mendekati real-time untuk sebagian besar kasus penggunaan, dengan pembersihan otomatis pesan setelah 24 jam.
# config/cable.yml
production:
adapter: solid_cable
polling_interval: 0.1
keep_messages_around_for: 1.dayGenerator Autentikasi Bawaan
Rails 8 menyertakan generator autentikasi yang menghasilkan scaffolding untuk login, logout, dan reset password. Tidak diperlukan gem eksternal untuk autentikasi dasar.
# Generate the authentication scaffolding
bin/rails generate authenticationPerintah ini membuat model User, model Session, SessionsController, PasswordsController, dan concern Authentication. Kode yang dihasilkan menggunakan has_secure_password dengan bcrypt serta menyertakan pembatasan percobaan login (10 percobaan setiap 3 menit per alamat IP).
# app/controllers/concerns/authentication.rb
module Authentication
extend ActiveSupport::Concern
included do
before_action :require_authentication
helper_method :authenticated?
end
private
def require_authentication
resume_session || request_authentication
end
def resume_session
Current.session = find_session_by_cookie
end
def find_session_by_cookie
Session.find_by(id: cookies.signed[:session_id]) if cookies.signed[:session_id]
end
def request_authentication
session[:return_to_after_authenticating] = request.url
redirect_to new_session_path
end
def authenticated?
Current.session.present?
end
endReset password menggunakan signed token dengan masa kedaluwarsa yang dihasilkan oleh has_secure_password, bukan token yang disimpan di basis data. Generator ini secara sengaja tidak menyertakan fitur registrasi, verifikasi email, maupun autentikasi sosial. Kode yang dihasilkan merupakan fondasi yang kokoh untuk dikembangkan lebih lanjut, bukan pengganti lengkap Devise.
Generator bawaan mencakup login, logout, dan reset password. Registrasi pengguna, verifikasi email, OAuth, dan autentikasi multi-faktor perlu ditambahkan secara manual atau melalui gem seperti Authentication Zero.
Penanganan Parameter yang Lebih Aman dengan params.expect
Rails 8 memperkenalkan params.expect, alternatif yang lebih ketat dibandingkan pola tradisional params.require.permit. Metode baru ini melemparkan exception ketika key tidak ditemukan, alih-alih mengembalikan nil secara diam-diam.
# Before (Rails 7)
def user_params
params.require(:user).permit(:name, :email, :role)
end
# After (Rails 8)
def user_params
params.expect(user: [:name, :email, :role])
endMetode expect memastikan bahwa key :user ada dan hanya mengandung atribut yang diizinkan. Jika key tidak ditemukan, metode ini langsung melemparkan ActionController::ParameterMissing, sehingga mencegah error tersembunyi di tahapan selanjutnya dalam alur eksekusi.
Propshaft: Asset Pipeline Default yang Baru
Propshaft menggantikan Sprockets sebagai asset pipeline default. Jika Sprockets menangani kompilasi, minifikasi, dan fingerprinting dalam satu sistem monolitik, Propshaft berfokus secara eksklusif pada penyajian dan fingerprinting file statis.
Untuk bundling JavaScript, Propshaft mendelegasikan ke tool modern: esbuild, Vite, atau Bun. Pemrosesan CSS dilakukan melalui Tailwind CLI atau dart-sass. Hasilnya adalah asset pipeline yang lebih cepat, lebih dapat diprediksi, dan selaras dengan ekosistem frontend masa kini.
# Gemfile (Rails 8 default)
gem "propshaft"Aplikasi yang sudah ada dan menggunakan Sprockets dapat terus menggunakannya tanpa kendala. Proses migrasi terdiri dari menghapus directive khusus Sprockets (//= require) dan mengadopsi import maps atau bundler JavaScript.
Siap menguasai wawancara Ruby on Rails Anda?
Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.
Kamal 2 dan Thruster: Deployment Tanpa Downtime
Rails 8 telah dikonfigurasi dengan Kamal 2, sebuah tool deployment yang mampu mengubah server Linux kosong menjadi server produksi hanya dengan satu perintah. Kamal 2 menggantikan Traefik dengan Kamal Proxy, reverse proxy yang dirancang khusus untuk kebutuhan ini.
kamal setup
kamal deployThruster ditempatkan di antara Kamal Proxy dan Puma. Komponen ini menyediakan akselerasi X-Sendfile untuk pengunduhan file, kompresi otomatis asset (gzip/brotli), dan dukungan HTTP/2. Dockerfile yang dihasilkan oleh Rails 8 sudah menyertakan Thruster secara default.
RUN gem install thruster
CMD ["thrust", "./bin/rails", "server"]Stack teknologi ini (Kamal 2 + Kamal Proxy + Thruster + Puma) menangani terminasi SSL, deployment tanpa downtime, dan rolling restart tanpa memerlukan layanan eksternal seperti Nginx atau HAProxy.
Peningkatan SQLite untuk Produksi
Rails 8 secara signifikan meningkatkan dukungan SQLite di lingkungan produksi. Connection pooling, mode WAL, dan peningkatan concurrency menjadikan SQLite layak digunakan untuk aplikasi berskala kecil hingga menengah. Dikombinasikan dengan Solid Trifecta, satu server tunggal dapat menjalankan aplikasi Rails 8 sepenuhnya menggunakan SQLite, tanpa server basis data eksternal sama sekali.
# config/database.yml (SQLite production setup)
production:
primary:
adapter: sqlite3
database: storage/production.sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
cache:
adapter: sqlite3
database: storage/production_cache.sqlite3
queue:
adapter: sqlite3
database: storage/production_queue.sqlite3
cable:
adapter: sqlite3
database: storage/production_cable.sqlite3Konfigurasi ini menjalankan seluruh stack aplikasi dari empat file SQLite. Kamal memasang direktori penyimpanan sebagai volume persisten, menjamin data tetap utuh saat container di-restart.
Migrasi dari Rails 7 ke Rails 8
Migrasi dari Rails 7.2 ke Rails 8.0 berjalan lancar selama aplikasi telah menangani semua deprecation warning terlebih dahulu. Aplikasi yang masih menggunakan Rails 7.0 atau 7.1 perlu melakukan upgrade bertahap: dari 7.0 ke 7.1, kemudian dari 7.1 ke 7.2, dan terakhir dari 7.2 ke 8.0.
Rails 8 mensyaratkan Ruby 3.2 atau versi yang lebih baru. Pastikan versi Ruby yang terinstal sudah sesuai, test suite lulus sepenuhnya di Rails 7.2, dan periksa kompatibilitas gem melalui RailsBump sebelum memulai proses upgrade.
Langkah 1: Memperbarui Dependensi
# Gemfile
gem "rails", "~> 8.0"bundle update railsLangkah 2: Menjalankan Task Pembaruan
bin/rails app:updatePerintah ini memperbarui file-file konfigurasi ke nilai default Rails 8. Sangat penting untuk meninjau setiap perubahan menggunakan git diff. Perubahan penting meliputi nilai default baru Regexp.timeout (1 detik), perubahan perilaku db:migrate (memuat schema pada basis data kosong), dan konfigurasi Propshaft.
Langkah 3: Menangani Reorganisasi Schema
Rails 8 mengurutkan ulang kolom di schema.rb agar mencerminkan urutan kolom yang sebenarnya di basis data. Disarankan untuk menjalankan schema dump segera agar perubahan kosmetik ini terpisah dari perubahan migrasi yang sesungguhnya:
bin/rails db:schema:dump
git add db/schema.rb
git commit -m "Reorder schema columns for Rails 8"Langkah 4: Mengadopsi Fitur Baru Secara Bertahap
Solid Trifecta, Propshaft, dan generator autentikasi bersifat opsional untuk aplikasi yang sudah ada. Sebaiknya fitur-fitur tersebut diadopsi secara individual setelah upgrade utama sudah stabil:
- Mengganti adapter job ke Solid Queue
- Memindahkan cache store ke Solid Cache
- Memigrasi Action Cable ke Solid Cable (jika digunakan)
- Mengevaluasi migrasi asset pipeline ke Propshaft
Langkah 5: Memodernisasi Penanganan Parameter
Mengganti seluruh pemanggilan params.require.permit dengan params.expect di semua controller. Perubahan ini bersifat opsional tetapi sangat dianjurkan untuk mendapatkan validasi parameter yang lebih ketat.
Rails 8.1: Continuable Jobs dan CI Terintegrasi
Rails 8.1, yang dirilis pada Oktober 2025, melanjutkan fondasi yang dibangun oleh Rails 8 dengan dua fitur utama. Continuable Jobs (ActiveJob::Continuable) memecah tugas berdurasi panjang menjadi langkah-langkah yang dilanjutkan secara otomatis. Jika server mengalami restart di tengah proses impor, tugas tersebut akan dilanjutkan tepat dari posisi terakhir alih-alih memulai ulang dari awal.
# app/jobs/import_records_job.rb
class ImportRecordsJob < ApplicationJob
include ActiveJob::Continuable
def perform(cursor:)
records = Record.where("id > ?", cursor.value || 0).limit(1000)
records.each do |record|
process(record)
cursor.advance(record.id)
end
end
endRails 8.1 juga memperkenalkan konfigurasi CI terintegrasi dan rendering Markdown bawaan, semakin mengurangi ketergantungan pada komponen eksternal.
Kesimpulan
Rails 8 merepresentasikan pergeseran fundamental dalam filosofi framework, mengutamakan kesederhanaan operasional tanpa mengorbankan fungsionalitas. Berikut poin-poin penting yang perlu diperhatikan:
- Solid Trifecta (Queue, Cache, Cable) mengeliminasi Redis sebagai dependensi wajib untuk background jobs, caching, dan WebSocket
- Generator autentikasi bawaan menyediakan fondasi autentikasi berbasis session tanpa gem pihak ketiga
params.expectmenggantikanparams.require.permitdengan penanganan parameter yang lebih ketat dan lebih aman- Propshaft menggantikan Sprockets sebagai asset pipeline default, mendelegasikan bundling ke tool modern
- Kamal 2 dan Thruster memungkinkan deployment tanpa downtime tanpa memerlukan Nginx atau Capistrano
- Migrasi dari Rails 7.2 bersifat inkremental: memperbarui dependensi, menjalankan
app:update, dan mengadopsi fitur baru secara bertahap - Rails 8.1 menambahkan Continuable Jobs dan CI terintegrasi bagi tim yang ingin mengurangi ketergantungan pada tool eksternal
Mulai berlatih!
Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.
Tag
Bagikan
