Ruby on Rails 8: Yeni Ozellikler ve 2026 Goc Rehberi

Rails 8, Solid Trifecta, yerlesik kimlik dogrulama, Kamal 2 ve Propshaft ile geliyor. Rails 7'den gecis adimlari ve kod ornekleri ile kapsamli rehber.

Ruby on Rails 8 yeni ozellikler ve goc rehberi illüstrasyonu

Ruby on Rails 8, framework tarihinde onemli bir donusumu temsil etmektedir. Kasim 2024'te yayinlanan ve Ekim 2025'te Rails 8.1 ile pekistirilen bu surum dongusu, yillardir uretim mimarilerini agirlastiran dis bagimliliklari ortadan kaldirmaktadir. Redis, Sprockets, Capistrano: Rails 8, veritabanina dayali entegre alternatifler sayesinde tum bu bilesenleri opsiyonel hale getirmektedir. Gelistirici ekipleri icin bu yeniden yapilandirma, dagitimi onemli olcude basitlestirmekte, altyapi maliyetlerini azaltmakta ve orta olcekli projeler icin giris bariyerini dusurmektedir.

Rails 8 Ozeti

Rails 8, gorevler, onbellek ve WebSocket'ler icin Redis'i Solid Trifecta (Solid Queue, Solid Cache, Solid Cable) ile degistirmekte, yerlesik kimlik dogrulama ureticisi sunmakta, varsayilan asset pipeline olarak Propshaft'i benimsemekte ve kesintisiz dagitimlar icin Kamal 2'yi icermektedir. Ruby 3.2 veya ustu gereklidir.

Solid Trifecta: Veritabanina Dayali Altyapi

Rails 8 oncesinde, ciddi her uretim uygulamasi uc kritik islevde Redis'e bagimliydı: arka plan gorevleri, onbellekleme ve WebSocket pub/sub. Solid Trifecta, bu uc yapiyi dogrudan mevcut iliskisel veritabani tarafindan yonetilen PostgreSQL, MySQL ve SQLite uyumlu adaptorlerle degistirmektedir.

Operasyonel kazanc aninda ortaya cikmaktadir: ayri bir Redis ornegini hazirlamak, izlemek ve surdurmeye artik gerek yoktur. Odun, ham performanstir. Redis, cok yuksek hacimli senaryolarda daha hizli kalmaktadir, ancak uygulamalarin buyuk cogunlugu icin veritabani tabanli adaptorler fazlasiyla yeterli performans sunmaktadir. 37signals'in ana uygulamasi Basecamp, 60 gunluk saklama suresiyle 10 TB'lik bir Solid Cache'i uretimde calistirmaktadir.

Solid Queue: Redis'siz Arka Plan Gorevleri

Solid Queue, veritabanina dayali Active Job backend'i olarak Sidekiq, Resque veya Delayed Job'in yerini almaktadir. PostgreSQL 9.5+ ve MySQL 8.0+'da FOR UPDATE SKIP LOCKED ozelligini kullanmakta, SQLite icin bir geri donus mekanizmasi sunmaktadir.

ruby
# 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.1

Puma eklentisi, gelistirme ortaminda Solid Queue'yu web sunucusuyla birlikte baslatmakta, bu da ayri bir surec baslatma gerekliligi ortadan kaldirmaktadir:

ruby
# config/puma.rb
plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"] || Rails.env.development?

Solid Queue, yinelenen gorevleri, esZamanlilik kontrollerini ve kuyruk bazinda duraklatma ve devam ettirme gibi gelismis ozellikleri desteklemektedir. Dakikada 10.000'den az gorev isleyen uygulamalar icin yuku sorunsuzca kaldirmaktadir.

Solid Cache ve Solid Cable

Solid Cache, onbelleğe alinan HTML parcalarini Memcached veya Redis yerine veritabaninda saklamaktadir. Disk depolamasi (SSD/NVMe), RAM'in maliyetinin bir kesri kadarina mal olmakta, bu da daha uzun saklama suresiyle cok daha buyuk onbellek havuzlarina olanak saglamaktadir.

ruby
# config/environments/production.rb
config.cache_store = :solid_cache_store

Solid Cable, Action Cable'in Redis pub/sub adaptorunun yerini almaktadir. WebSocket mesajlari bir tabloya yazilmakta ve varsayilan olarak her 100 ms'de bir sorgulanmaktadir. Sonuc: cogu kullanim senaryosu icin neredeyse gercek zamanli iletisim ve 24 saat sonra mesajlarin otomatik temizlenmesi.

yaml
# config/cable.yml
production:
  adapter: solid_cable
  polling_interval: 0.1
  keep_messages_around_for: 1.day

Yerlesik Kimlik Dogrulama Ureticisi

Rails 8, giris, cikis ve parola sifirlama icin gerekli yapilari ureten bir kimlik dogrulama ureticisi icermektedir. Temel kimlik dogrulama icin harici bir gem gerekmemektedir.

bash
# Generate the authentication scaffolding
bin/rails generate authentication

Bu komut User modeli, Session modeli, SessionsController, PasswordsController ve bir Authentication concern olusturmaktadir. Uretilen kod, bcrypt ile has_secure_password kullanmakta ve IP basina 3 dakikada 10 giris denemesi sinirlamasi icermektedir.

ruby
# 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
end

Parola sifirlama, veritabaninda saklanan token'lar yerine has_secure_password tarafindan uretilen, suresi dolan imzali token'lara dayanmaktadir. Uretici bilerek kayit, e-posta dogrulama veya sosyal kimlik dogrulamayi icermemektedir. Uretilen kod, Devise'in tam bir yedegi degil, genisletilebilir saglam bir temeldir.

Uretici Kapsami

Yerlesik uretici giris, cikis ve parola sifirlamayi kapsamaktadir. Kullanici kaydi, e-posta dogrulama, OAuth ve cok faktorlu kimlik dogrulama manuel olarak veya Authentication Zero gibi gem'ler araciligiyla eklenmelidir.

params.expect ile Guvenli Parametre Yonetimi

Rails 8, geleneksel params.require.permit yerine daha katı bir alternatif olan params.expect'i sunmaktadir. Yeni yaklasim, sessizce nil dondurmek yerine anahtarlar eksik oldugunda bir istisna firlatmaktadir.

ruby
# 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])
end

expect metodu, :user anahtarinin var oldugunu ve yalnızca izin verilen ozellikleri icerdigini garanti etmektedir. Yoklugunda hemen ActionController::ParameterMissing firlatmakta, bu da yurutme akisinin ilerisinde sessiz hatalari onlemektedir.

Propshaft: Varsayilan Yeni Asset Pipeline

Propshaft, varsayilan asset pipeline olarak Sprockets'in yerini almaktadir. Sprockets derleme, kucultme ve parmak izi eklemeyi monolitik bir sistemde yonetirken, Propshaft yalnizca statik dosyalarin sunumu ve parmak izi eklemesine odaklanmaktadir.

JavaScript paketleme icin Propshaft modern araclara devretmektedir: esbuild, Vite veya Bun. CSS isleme Tailwind CLI veya dart-sass uzerinden yapilmaktadir. Sonuc: daha hizli, daha ongorulebilir ve mevcut frontend ekosistemiyle uyumlu bir asset pipeline.

ruby
# Gemfile (Rails 8 default)
gem "propshaft"

Sprockets kullanan mevcut uygulamalar kisitlama olmadan bunu kullanmaya devam edebilmektedir. Goc, Sprockets'a ozgu yonergelerin (//= require) kaldirilmasi ve import maps veya JavaScript bundler'in benimsenmesinden ibarettir.

Ruby on Rails mülakatlarında başarılı olmaya hazır mısın?

İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.

Kamal 2 ve Thruster: Kesintisiz Dagitim

Rails 8, bos bir Linux sunucusunu tek komutla uretim sunucusuna donusturebilen bir dagitim araci olan Kamal 2 ile onceden yapilandirilmis olarak gelmektedir. Kamal 2, Traefik'i bu amac icin ozel olarak tasarlanmis bir reverse proxy olan Kamal Proxy ile degistirmektedir.

bash
kamal setup
kamal deploy

Thruster, Kamal Proxy ve Puma arasinda yer almaktadir. Dosya indirmeleri icin X-Sendfile hizlandirmasi, otomatik asset sikistirma (gzip/brotli) ve HTTP/2 destegi saglamaktadir. Rails 8 tarafindan uretilen Dockerfile varsayilan olarak Thruster'i icermektedir.

dockerfile
RUN gem install thruster
CMD ["thrust", "./bin/rails", "server"]

Bu teknoloji yigini (Kamal 2 + Kamal Proxy + Thruster + Puma) SSL sonlandirma, kesintisiz dagitimlar ve asamali yeniden baslatmalari Nginx veya HAProxy gibi harici servislere basvurmadan yonetmektedir.

Uretim Icin Guclendirilmis SQLite

Rails 8, uretimde SQLite destegini onemli olcude iyilestirmektedir. Connection pooling, WAL modu ve gelistirilmis esZamanlilik, SQLite'i kucuk ve orta olcekli uygulamalar icin uygun hale getirmektedir. Solid Trifecta ile birlestiginde, tek bir sunucu herhangi bir harici veritabani sunucusu olmadan tamamen SQLite uzerinde bir Rails 8 uygulamasi calistirabilmektedir.

yaml
# 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.sqlite3

Bu yapilandirma, tum uygulama yiginini dort SQLite dosyasindan calistirmaktadir. Kamal, depolama dizinini kalici bir birim olarak baglamakta, verilerin container yeniden baslatmalarindan kurtulmasini saglamaktadir.

Rails 7'den Rails 8'e Goc

Rails 7.2'den Rails 8.0'a gec, uygulama onceden kaldirilma uyarilarini gidermis olmak kosulyla sorunsuz ilerlemektedir. Rails 7.0 veya 7.1 altindaki uygulamalar adim adim ilerlemelidir: 7.0'dan 7.1'e, sonra 7.1'den 7.2'ye ve son olarak 7.2'den 8.0'a.

Kontrol Edilmesi Gereken On Kosullar

Rails 8, Ruby 3.2 veya uzerini gerektirmektedir. Ruby versiyonunun kontrol edilmesi, test paketinin Rails 7.2 altinda gectiginden emin olunmasi ve guncellemeyi baslatmadan once gem uyumlulugunu RailsBump uzerinden dogrulanmasi gerekmektedir.

Adim 1: Bagimliliklari Guncelleme

ruby
# Gemfile
gem "rails", "~> 8.0"
bash
bundle update rails

Adim 2: Guncelleme Gorevini Calistirma

bash
bin/rails app:update

Bu komut yapilandirma dosyalarini Rails 8 varsayilanlarina guncellemektedir. git diff ile her degisikligin incelenmesi onemlidir. Onemli degisiklikler arasinda yeni Regexp.timeout varsayilani (1 saniye), db:migrate'in degisen davranisi (bos veritabanlarinda sema yukleme) ve Propshaft yapilandirmasi bulunmaktadir.

Adim 3: Sema Yeniden Duzenlemeyi Yonetme

Rails 8, veritabanindaki gercek sutun sirasini yansitmak icin schema.rb sutunlarini yeniden siralamaktadir. Bu kozmetik degisikligi gercek migrasyon degisikliklerinden izole etmek icin sema dump'inin hemen calistirilmasi onerilmektedir:

bash
bin/rails db:schema:dump
git add db/schema.rb
git commit -m "Reorder schema columns for Rails 8"

Adim 4: Yeni Ozellikleri Asamali Olarak Benimseme

Solid Trifecta, Propshaft ve kimlik dogrulama ureticisi mevcut uygulamalar icin opsiyonel kalmaktadir. Ana guncelleme stabilize olduktan sonra bunlari tek tek benimsemek tercih edilmelidir:

  1. Gorev adaptorunun Solid Queue ile degistirilmesi
  2. Onbellek deposunun Solid Cache'e gecilmesi
  3. Action Cable'in Solid Cable'a tasinmasi (varsa)
  4. Asset pipeline'in Propshaft'a gocunun degerlendirilmesi

Adim 5: Parametre Yonetimini Modernlestirme

Tum controller'larda params.require.permit cagrilarinin params.expect ile degistirilmesi gerekmektedir. Bu degisiklik opsiyoneldir ancak daha saglam parametre dogrulamasi icin siddetle onerilmektedir.

Rails 8.1: Continuable Jobs ve Entegre CI

Ekim 2025'te yayinlanan Rails 8.1, Rails 8 tarafindan konulan temelleri iki onemli ozellikle genisletmektedir. Continuable Jobs (ActiveJob::Continuable), uzun sureli gorevleri otomatik olarak devam eden adimlara bolmektedir. Bir import sirasinda sunucu yeniden baslarsa, gorev sifirdan baslamak yerine tam olarak kaldigi yerden devam etmektedir.

ruby
# 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
end

Rails 8.1 ayrica entegre CI yapilandirmasi ve yerel Markdown renderlama sunarak harici bagimliliklari daha da azaltmaktadir.

Sonuc

Rails 8, ozellikleri tehlikeye atmadan operasyonel basitligi on plana cikaran framework felsefesinde onemli bir donusumu temsil etmektedir. Hatirlanmasi gereken temel noktalar:

  • Solid Trifecta (Queue, Cache, Cable), gorevler, onbellek ve WebSocket'ler icin zorunlu bagimlilik olarak Redis'i ortadan kaldirmaktadir
  • Yerlesik kimlik dogrulama ureticisi, ucuncu parti gem olmadan oturum tabanli kimlik dogrulama icin temel saglamaktadir
  • params.expect, params.require.permit yerine daha katı ve guvenli parametre yonetimi sunmaktadir
  • Propshaft, varsayilan asset pipeline olarak Sprockets'in yerini almakta ve paketlemeyi modern araclara devretmektedir
  • Kamal 2 ve Thruster, Nginx veya Capistrano'ya basvurmadan kesintisiz dagitimlar saglamaktadir
  • Rails 7.2'den goc artimsal olarak gerceklesmektedir: bagimliliklarin guncellenmesi, app:update calistirilmasi ve yeni ozelliklerin asamali olarak benimsenmesi
  • Rails 8.1, harici araclari azaltmak isteyen ekipler icin Continuable Jobs ve entegre CI eklemektedir

Pratik yapmaya başla!

Mülakat simülatörleri ve teknik testlerle bilgini test et.

Etiketler

#ruby-on-rails
#rails-8
#tutorial
#migration
#solid-queue
#solid-cache
#authentication

Paylaş

İlgili makaleler