# Ruby on Rails 8: ฟีเจอร์ใหม่และคู่มือการอัปเกรดฉบับสมบูรณ์ 2026 > คู่มือฉบับสมบูรณ์สำหรับ Ruby on Rails 8 ครอบคลุมฟีเจอร์ใหม่ทั้งหมด ได้แก่ Solid Queue, Solid Cache, ระบบ Authentication ในตัว, Propshaft, Kamal 2 พร้อมขั้นตอนการอัปเกรดจาก Rails 7 อย่างละเอียด - Published: 2026-04-17 - Updated: 2026-04-17 - Author: SharpSkill - Tags: ruby-on-rails, rails-8, tutorial, migration, solid-queue, solid-cache, authentication - Reading time: 9 min --- Ruby on Rails 8 ถือเป็นการอัปเดตครั้งสำคัญที่สุดของเฟรมเวิร์กในรอบหลายปี โดยมุ่งเน้นไปที่การลดการพึ่งพาบริการภายนอก (external services) และทำให้แอปพลิเคชัน Rails สามารถทำงานได้อย่างสมบูรณ์ด้วยตัวเอง แนวคิดหลักคือ "No PaaS Required" หมายความว่านักพัฒนาสามารถ deploy แอปพลิเคชันไปยังเซิร์ฟเวอร์ทั่วไปได้โดยไม่จำเป็นต้องพึ่งพา Platform-as-a-Service อีกต่อไป บทความนี้จะพาไปสำรวจฟีเจอร์ใหม่ทั้งหมดของ Rails 8 พร้อมตัวอย่างโค้ดจริง และคู่มือการอัปเกรดจาก Rails 7 แบบทีละขั้นตอน > **ภาพรวมของ Rails 8** > > Rails 8 มาพร้อมกับการเปลี่ยนแปลงสำคัญหลายประการ ได้แก่ Solid Trifecta (Solid Queue, Solid Cache, Solid Cable) สำหรับโครงสร้างพื้นฐานที่ใช้ฐานข้อมูลเป็นหลัก, ระบบ Authentication Generator ในตัว, การจัดการพารามิเตอร์ที่ปลอดภัยยิ่งขึ้นด้วย params.expect, Propshaft เป็น asset pipeline ตัวใหม่, Kamal 2 สำหรับการ deploy อัตโนมัติ และการรองรับ SQLite ในระดับ production อย่างเต็มรูปแบบ ## Solid Trifecta: โครงสร้างพื้นฐานที่ขับเคลื่อนด้วยฐานข้อมูล หนึ่งในการเปลี่ยนแปลงที่สำคัญที่สุดของ Rails 8 คือการเปิดตัว "Solid Trifecta" ซึ่งประกอบด้วย Solid Queue, Solid Cache และ Solid Cable ทั้งสามตัวนี้ทำหน้าที่แทนที่บริการภายนอกอย่าง Redis, Memcached หรือระบบ message queue อื่นๆ ด้วยการใช้ฐานข้อมูลเชิงสัมพันธ์ (relational database) เป็นตัวจัดเก็บข้อมูลแทน แนวทางนี้ช่วยลดความซับซ้อนของโครงสร้างพื้นฐานได้อย่างมาก เนื่องจากไม่จำเป็นต้องดูแลรักษาบริการเพิ่มเติมอีกต่อไป ### Solid Queue: ระบบจัดการ Background Job ด้วยฐานข้อมูล Solid Queue เป็นระบบจัดการ background job ที่มาแทนที่ Sidekiq หรือ Resque โดยใช้ฐานข้อมูลเป็นตัวจัดเก็บคิว ข้อดีของ Solid Queue คือไม่ต้องติดตั้ง Redis แยกต่างหาก ทำให้การตั้งค่าและดูแลรักษาง่ายขึ้น นอกจากนี้ยังรองรับฟีเจอร์ขั้นสูงอย่าง recurring jobs, concurrency controls และ queue priorities ได้อย่างครบถ้วน การตั้งค่า Solid Queue ทำได้โดยกำหนดค่าใน production environment และไฟล์ configuration ดังนี้: ```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 ``` ในไฟล์ configuration ข้างต้น dispatchers ทำหน้าที่กระจายงานไปยัง workers โดยมี polling_interval กำหนดความถี่ในการตรวจสอบงานใหม่ ส่วน workers กำหนดจำนวน threads และ processes ที่ใช้ประมวลผลงาน สามารถปรับแต่งค่าเหล่านี้ให้เหมาะสมกับปริมาณงานของแอปพลิเคชันได้ สำหรับสภาพแวดล้อม development สามารถรัน Solid Queue ภายใน Puma process เดียวกันได้ ซึ่งช่วยลดความยุ่งยากในการตั้งค่า: ```ruby # config/puma.rb plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"] || Rails.env.development? ``` การใช้ plugin นี้ทำให้ไม่ต้องรัน process แยกสำหรับ Solid Queue ในระหว่างการพัฒนา ซึ่งทำให้ workflow ราบรื่นยิ่งขึ้น ### Solid Cache และ Solid Cable: แคชและ WebSocket ที่ใช้ฐานข้อมูล Solid Cache เป็นระบบแคชที่ใช้ฐานข้อมูลแทน Redis หรือ Memcached ข้อได้เปรียบสำคัญคือสามารถจัดเก็บข้อมูลแคชได้มากกว่า RAM-based cache เนื่องจากใช้ดิสก์เป็นที่จัดเก็บ ทำให้เหมาะสำหรับแอปพลิเคชันที่ต้องการแคชข้อมูลจำนวนมาก ```ruby # config/environments/production.rb config.cache_store = :solid_cache_store ``` Solid Cable เป็น adapter สำหรับ Action Cable ที่ใช้ฐานข้อมูลแทน Redis ในการส่งข้อมูลแบบ real-time ผ่าน WebSocket ซึ่งเพียงพอสำหรับแอปพลิเคชันส่วนใหญ่ที่ไม่ได้ต้องการ throughput ระดับสูงมาก ```yaml # config/cable.yml production: adapter: solid_cable polling_interval: 0.1 keep_messages_around_for: 1.day ``` ค่า polling_interval กำหนดความถี่ในการตรวจสอบข้อความใหม่ และ keep_messages_around_for กำหนดระยะเวลาที่เก็บข้อความไว้ก่อนลบออกจากฐานข้อมูล ## ระบบ Authentication Generator ในตัว Rails 8 มาพร้อมกับ authentication generator ในตัว ซึ่งสร้างระบบยืนยันตัวตนพื้นฐานที่พร้อมใช้งานทันที โดยไม่จำเป็นต้องพึ่งพา gem ภายนอกอย่าง Devise หรือ Clearance สำหรับกรณีการใช้งานทั่วไป ```bash # Generate the authentication scaffolding bin/rails generate authentication ``` คำสั่งนี้จะสร้างไฟล์ที่จำเป็นทั้งหมด ได้แก่ model สำหรับ User และ Session, controller สำหรับ sessions และ passwords, concern สำหรับ authentication logic, migration files และ views ที่เกี่ยวข้อง หัวใจสำคัญของระบบนี้คือ Authentication concern ที่จัดการ session และการตรวจสอบสิทธิ์: ```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 ``` โค้ดข้างต้นแสดงให้เห็นว่าระบบ authentication ของ Rails 8 ใช้แนวทางที่เรียบง่ายและเข้าใจง่าย โดยอาศัย signed cookies ในการจัดเก็บ session ID และใช้ Current attributes ของ Rails ในการเข้าถึง session ปัจจุบัน > **ขอบเขตของ Authentication Generator** > > ระบบ authentication ที่สร้างขึ้นครอบคลุมการทำงานพื้นฐาน ได้แก่ การลงชื่อเข้าใช้/ออกจากระบบ, การจัดการ session, การรีเซ็ตรหัสผ่าน และ password hashing ด้วย bcrypt อย่างไรก็ตาม สำหรับฟีเจอร์ขั้นสูงอย่าง OAuth, two-factor authentication หรือ social login ยังคงต้องใช้ gem เพิ่มเติมหรือพัฒนาเอง ## การจัดการพารามิเตอร์ที่ปลอดภัยยิ่งขึ้นด้วย params.expect Rails 8 เปิดตัว `params.expect` ซึ่งเป็นวิธีใหม่ในการจัดการ strong parameters ที่ปลอดภัยกว่า `params.require(...).permit(...)` แบบเดิม ข้อแตกต่างสำคัญคือ `params.expect` จะตรวจสอบทั้งโครงสร้างและประเภทของพารามิเตอร์ ช่วยป้องกันปัญหาที่อาจเกิดจากการส่งข้อมูลที่ไม่ถูกต้อง ```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 ``` ไวยากรณ์ใหม่นี้กระชับกว่าเดิม และยังให้การป้องกันที่ดีขึ้นจากการโจมตีแบบ parameter injection เนื่องจากสามารถกำหนดโครงสร้างที่คาดหวังได้ชัดเจนยิ่งขึ้น ในกรณีที่พารามิเตอร์ไม่ตรงตามรูปแบบที่กำหนด ระบบจะ raise ActionController::ExpectedParameterMissing แทนที่จะคืนค่า nil โดยเงียบ ## Propshaft: Asset Pipeline ตัวใหม่ Rails 8 เปลี่ยนมาใช้ Propshaft เป็น asset pipeline เริ่มต้นแทน Sprockets ที่ใช้มาตั้งแต่ Rails 3.1 Propshaft มีแนวทางที่เรียบง่ายกว่ามาก โดยทำหน้าที่หลักเพียงสองอย่างคือ การ serve static assets และการ fingerprinting (เพิ่ม hash ต่อท้ายชื่อไฟล์เพื่อจัดการ cache) โดยไม่มีฟีเจอร์ compilation หรือ transpilation ในตัว ```ruby # Gemfile (Rails 8 default) gem "propshaft" # No configuration needed for basic usage # Assets in app/assets are served and fingerprinted automatically ``` ข้อดีของ Propshaft คือความเรียบง่ายและความเร็ว ไม่จำเป็นต้องตั้งค่าอะไรเพิ่มเติมสำหรับการใช้งานพื้นฐาน ทุกไฟล์ที่อยู่ใน app/assets จะถูก serve และ fingerprint โดยอัตโนมัติ สำหรับนักพัฒนาที่ต้องการ CSS หรือ JavaScript processing สามารถใช้เครื่องมือภายนอกอย่าง Tailwind CSS CLI หรือ esbuild ร่วมกับ Propshaft ได้อย่างลงตัว ## Kamal 2 และ Thruster: การ Deploy แบบมืออาชีพ Kamal 2 เป็นเครื่องมือ deployment ที่มาพร้อมกับ Rails 8 โดยค่าเริ่มต้น ทำหน้าที่ deploy แอปพลิเคชันไปยังเซิร์ฟเวอร์ใดก็ได้ที่รัน Docker ได้ ไม่ว่าจะเป็น VPS, bare metal หรือ cloud instance โดยไม่ต้องพึ่งพา PaaS อย่าง Heroku หรือ Render ```bash # Deploy to a fresh server kamal setup # Subsequent deployments kamal deploy ``` Kamal 2 จัดการทุกอย่างตั้งแต่การสร้าง Docker image, การ push ไปยัง registry, การรัน container บนเซิร์ฟเวอร์ ไปจนถึง zero-downtime deployment ผ่าน rolling restarts นอกจาก Kamal แล้ว Rails 8 ยังเปิดตัว Thruster ซึ่งเป็น HTTP/2 proxy ที่เขียนด้วย Go ทำหน้าที่จัดการ SSL termination, asset caching และ X-Sendfile ไว้ใน process เดียว: ```dockerfile # Excerpt from Rails 8 generated Dockerfile RUN gem install thruster CMD ["thrust", "./bin/rails", "server"] ``` Thruster ทำให้ไม่จำเป็นต้องใช้ Nginx หรือ Apache เป็น reverse proxy อีกต่อไป ลดความซับซ้อนของ production stack ลงอย่างมาก ## การรองรับ SQLite สำหรับ Production Rails 8 ยกระดับการรองรับ SQLite ให้เหมาะสมกับการใช้งานใน production สำหรับแอปพลิเคชันขนาดเล็กถึงกลาง ด้วย Solid Trifecta ที่ใช้ฐานข้อมูลเป็นหลัก ทำให้สามารถแยกฐานข้อมูลออกเป็นหลายไฟล์ตามหน้าที่การใช้งาน: ```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 ``` การแยกฐานข้อมูลออกเป็นไฟล์ต่างๆ ช่วยลดปัญหา write contention และทำให้แต่ละส่วนสามารถทำงานได้อย่างเป็นอิสระ ฐานข้อมูลหลัก (primary) ใช้เก็บข้อมูลแอปพลิเคชัน ในขณะที่ cache, queue และ cable มีฐานข้อมูลเฉพาะของตัวเอง แนวทางนี้เหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการความเรียบง่ายในการดูแลรักษาโดยไม่ต้องติดตั้ง PostgreSQL หรือ MySQL ## คู่มือการอัปเกรดจาก Rails 7 สู่ Rails 8 การอัปเกรดจาก Rails 7 ไปยัง Rails 8 เป็นกระบวนการที่ต้องทำอย่างรอบคอบ แม้ว่า Rails team จะออกแบบให้การเปลี่ยนผ่านราบรื่นที่สุด แต่ก็มีการเปลี่ยนแปลงหลายจุดที่ต้องให้ความสนใจ > **รายการตรวจสอบก่อนอัปเกรด** > > ก่อนเริ่มกระบวนการอัปเกรด ควรตรวจสอบสิ่งต่อไปนี้: ตรวจสอบว่าแอปพลิเคชันรันบน Rails 7.2 เวอร์ชันล่าสุดแล้ว, แก้ไข deprecation warnings ทั้งหมดที่ปรากฏใน log, ตรวจสอบความเข้ากันได้ของ gem ที่ใช้กับ Rails 8, สำรองฐานข้อมูลและสร้าง branch ใหม่สำหรับการอัปเกรด, ตรวจสอบว่า Ruby version เป็น 3.2 ขึ้นไป ### ขั้นตอนที่ 1: อัปเดต Gemfile เริ่มต้นด้วยการเปลี่ยนเวอร์ชันของ Rails ใน Gemfile: ```ruby # Gemfile gem "rails", "~> 8.0" ``` ### ขั้นตอนที่ 2: รัน Bundle Update อัปเดต gem ทั้งหมดที่เกี่ยวข้อง: ```bash bundle update rails ``` หากพบ dependency conflicts ให้ตรวจสอบว่า gem ที่ใช้มีเวอร์ชันที่รองรับ Rails 8 หรือไม่ อาจจำเป็นต้องอัปเดต gem อื่นๆ ร่วมด้วย ### ขั้นตอนที่ 3: รัน App Update Task Rails มี task สำหรับอัปเดตไฟล์ configuration ต่างๆ ให้ตรงกับเวอร์ชันใหม่: ```bash bin/rails app:update ``` คำสั่งนี้จะถามว่าต้องการเขียนทับไฟล์ที่มีการเปลี่ยนแปลงหรือไม่ ควรตรวจสอบแต่ละไฟล์อย่างละเอียดก่อนตัดสินใจ โดยเฉพาะไฟล์ configuration ที่มีการปรับแต่งเฉพาะสำหรับแอปพลิเคชัน ### ขั้นตอนที่ 4: อัปเดต Database Schema Rails 8 อาจเปลี่ยนลำดับคอลัมน์ใน schema dump: ```bash bin/rails db:schema:dump git add db/schema.rb git commit -m "Reorder schema columns for Rails 8" ``` ### ขั้นตอนที่ 5: ทดสอบแอปพลิเคชัน หลังจากอัปเกรดเสร็จสิ้น ให้รัน test suite ทั้งหมดเพื่อตรวจสอบว่าทุกอย่างทำงานได้ถูกต้อง ควรให้ความสนใจเป็นพิเศษกับส่วนที่ใช้ strong parameters (เปลี่ยนเป็น params.expect), asset pipeline (เปลี่ยนจาก Sprockets เป็น Propshaft) และ background jobs (หากต้องการเปลี่ยนไปใช้ Solid Queue) ## Rails 8.1: Continuable Jobs และฟีเจอร์ที่น่าจับตา Rails 8.1 ซึ่งเปิดตัวในเดือนตุลาคม 2025 นำเสนอฟีเจอร์ที่น่าสนใจอย่าง Continuable Jobs ซึ่งช่วยแก้ปัญหาของ long-running jobs ที่อาจถูกยกเลิกกลางทางเนื่องจาก timeout หรือการ deploy ใหม่ ```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 ``` Continuable Jobs ใช้ระบบ cursor ในการติดตามความคืบหน้าของงาน หาก job ถูกหยุดกลางทาง ระบบจะ re-enqueue job ใหม่โดยเริ่มต้นจากจุดที่ค้างไว้ แทนที่จะเริ่มต้นใหม่ตั้งแต่ต้น ฟีเจอร์นี้มีประโยชน์อย่างยิ่งสำหรับงานประมวลผลข้อมูลจำนวนมาก เช่น การ import ข้อมูล การส่ง email จำนวนมาก หรือการประมวลผลรายงาน ## สรุป Ruby on Rails 8 เป็นการอัปเดตที่มีความสำคัญและเปลี่ยนแนวทางการพัฒนาเว็บแอปพลิเคชันด้วย Rails อย่างมีนัยสำคัญ ประเด็นสำคัญที่ควรจดจำ: - **Solid Trifecta** (Solid Queue, Solid Cache, Solid Cable) ช่วยลดการพึ่งพา Redis และบริการภายนอก โดยใช้ฐานข้อมูลเป็นโครงสร้างพื้นฐานหลัก - **Authentication Generator** ในตัวทำให้สามารถสร้างระบบยืนยันตัวตนพื้นฐานได้ทันทีโดยไม่ต้องพึ่ง gem ภายนอก - **params.expect** มอบวิธีการจัดการพารามิเตอร์ที่ปลอดภัยและกระชับยิ่งขึ้น - **Propshaft** เป็น asset pipeline ที่เรียบง่ายและเร็วกว่า Sprockets - **Kamal 2 และ Thruster** ทำให้การ deploy ไปยังเซิร์ฟเวอร์ของตัวเองทำได้ง่ายดาย - **SQLite ใน Production** เป็นตัวเลือกที่เหมาะสมสำหรับแอปพลิเคชันขนาดเล็กถึงกลาง - **Continuable Jobs** ใน Rails 8.1 จะช่วยจัดการ long-running jobs ได้อย่างมีประสิทธิภาพ สำหรับนักพัฒนาที่กำลังพิจารณาอัปเกรด แนะนำให้เริ่มต้นด้วยการทดสอบในสภาพแวดล้อม staging ก่อน และค่อยๆ เปิดใช้ฟีเจอร์ใหม่ทีละอย่าง Rails 8 ไม่ได้บังคับให้ต้องใช้ทุกฟีเจอร์พร้อมกัน สามารถเลือกใช้เฉพาะส่วนที่เหมาะสมกับโปรเจกต์ได้ --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/th/blog/ruby-on-rails/ruby-on-rails-8-new-features-migration-guide