Rails 8 มาถึงแล้ว และมันกำลังเปลี่ยนแปลงสิ่งต่างๆ อย่างน่าตื่นเต้น ถ้าคุณ active ใน Rails community แล้ว คุณอาจเคยได้ยิน tagline: "No PaaS Required" (ไม่ต้องใช้ PaaS)
นี่คือ mission ที่ unusual (แตไม่น่า surprised) — release นี้ทั้งหมดเกี่ยวกับการทำให้ deploy Rails apps ของคุณง่ายขึ้นโดยไม่ต้องใช้ fully-featured platform-as-a-service (PaaS)
Platforms เสนอวิธีให้ developers นำแอปขึ้นเว็บโดยไม่ต้อง manage underlying infrastructure ที่รันโค้ดของพวกเขา ธุรกิจอย่าง Heroku, Render, Fly, และ Railway เป็นตัวเลือกยอดนิยมใน Rails community Developers มักยอม trade ค่า hosting เพิ่มเติมเพื่อ developer experience ที่ platforms ให้ แต release Rails ครั้งนี้มองหาทำให้ trade นั้น tempting น้อยลง
ในบทความนี้ เราจะ review ฟีเจอร์ใหม่และปรับปรุงที่ทำให้เป็นไปได้ สิ่งอย่าง Solid Cache, Solid Queue, และ Solid Cable เป็นใหม่ใน Rails 8 และตัด dependencies ที่เราเคยต้องการ (อย่าง Redis) ออกไป Kamal 2 ตอนนี้เป็น default สำหรับ deployments และมี authentication generators ใหม่ที่ลบความจำเป็นของอีก gem หนึ่ง มาเริ่มกันเลย
Rails 8 เปลี่ยนอะไรบ้าง?
Rails (และโดยเฉพาะ Rails 8) อยากจริงๆ ให้คุณ ship applications ไป production โดยไม่ต้องจ่ายเงิน platform ส่วนใหญ่ของการเปลี่ยนแปลงใน release นี้ของ Rails หมุนรอบ mission นั้น — ลดงานที่ต้องทำเพื่อ host Rails applications เอง โดยไม่ต้อง PaaS!
มาดูแต่ละ major change ใกล้ชิดกัน
Solid Cache สำหรับ caching โดยไม่ต้อง Redis
Rails ใช้ ActiveSupport เพื่อ cache สิ่งต่างๆ ซึ่ง critical ทำให้ web apps performant ทางประวัติศาสตร์ คนพึ่งพา Redis สำหรับ caching เพราะมันเร็วและ reliable
Solid Cache เปิดตัวไปพักหนึ่งเป็น Redis-free cache store สำหรับ ActiveSupport มันถูกใช้ที่ 37signals และอื่นๆ มาพักหนึ่ง และ Rails ตอนนี้ promote มันเป็น default choice เพราะมันใช้ database (SQLite โดย default) สำหรับ cache store แทน RAM คุณได้ bonus คือ cache มากกว่าปกติมาก Database space ถูกกว่า RAM ดังนั้นแม้ใช้ database back caching system จะช้ากว่าใช้ RAM ความสามารถในการ cache สิ่งมากขึ้นและนานขึ้นสามารถทำให้บางแอป performant แม้กว่า
Performance tradeoff นี้ดีสำหอบาง use cases แต่อาจไม่ ideal สำหรับอื่นๆ ดังนั้นยังง่ายที่จะใช้ cache stores อื่นๆ การลบความจำเป็นของ Redis หรือ Memcached โดย default ทำให้คุณ近一步สู่ mission "No PaaS Required" ที่ Rails มุ่งหน้า
Solid Queue สำหรับ background jobs โดยไม่ต้อง Redis
คุณคงรู้แล้วว่า Rails ใช้ library ActiveJob ทำให้เขียนและรัน background jobs ง่ายขึ้น คล้ายกับ caching Rails ให้คุณเลือก backend ที่ power ActiveJob หลายคนชอบ Sidekiq หรือ Good Job แตตัวเลือกส่วนใหญ่วันนี้มีปัญหา 2 ข้อ:
- พวกมันเป็น dependency อีกตัวที่ต้อง import, manage และอาจจ่ายเงิน
- พวกมันพึ่งพา service อื่นอย่าง Redis (ที่คุณต้อง host, manage และอาจจ่ายเงิน)
Solid Queue หาแก้ทั้งคู่โดยจัดการ background jobs โดยไม่พึ่งพา Redis ถ้าคุณใช้ Sidekiq หรือ queueing provider อื่นที่พึ่งพา Redis Solid Queue เป็น alternative ที่ลดความซับซ้อนและทำให้ hosting ง่ายขึ้น เหมือน Solid Cache Solid Queue ใช้ application's database แทน RAM เพื่อ track background jobs เป็นอีกฟีเจอร์ที่ Rails ให้โดย default เพื่อลด dependencies และทำให้ production deployments เรียบง่าย
Solid Cable สำหรับ web sockets โดยไม่ต้อง Redis
Rails ใช้ Action Cable ทำให้ developers ใช้ web sockets สำหรับ real-time features ง่ายขึ้น ทางประวัติ ต้องการ Redis คุณคงเดาได้ว่าไปไหน!
คงกับ 'Solid' theme Rails 8 ส่งมอบอีก default database-backed adapter คุณไม่ ต้อง ใช้มัน แตถ้าคุณมองหาใช้ web sockets และอยากหลีกเลี่ยงการ configure และ maintain Redis นี่คือ first-party option ที่ยอดเยี่ยม ร่วมกับ Solid Cache และ Solid Queue Solid Cable ทำให้ ship Rails applications โดยไม่ต้อง PaaS ง่ายขึ้นอีก โดยลบความจำเป็นของ Redis และพึ่งพา database
Kamal 2 สำหรับ deployments ที่ง่ายขึ้น
ฟีเจอร์ใหม่ถัดไปใน Rails 8 แตกต่างจาก Solid adapters มาก ยังไง Kamal (โดยเฉพาะ Kamal 2) ทำให้ ship applications ด้วย hardware ของตัวเอง straightforward มาก เพราะ Docker ทำให้ modularize software ง่าย การมี software ส่ง Docker containers ไม่ว่าจะเป็นภาษาอะไร ก็สมเหตุสมผล
ในความคิดเห็นของผม Kamal แม้คู่กับส่วนที่เหลือของ Rails 8 ก็ไม่สามารถแตะ developer experience ของ platforms ส่วนใหญ่ได้ แต่มันทำให้ ง่ายขึ้นมาก ในการ ship software ไป web server ของตัวเอง แม้คุณไม่ใช้ Rails! มันอาจไม่ใช่ complete replacement สำหรับ PaaS แต่เมื่อคุณ initial setup เสร็จแล้ว การรัน kamal deploy เป็น huge improvement มากกว่าทำ deployments เอง
Authentication Generators (โดยไม่ต้อง Devise!)
ถ้าคุณทำ Rails app ที่มี users คุณน่าจะต้องการ authentication จนตอนนี้ Rails ไม่ได้รวม authentication เป็นส่วนของ framework ชุมชนมี solutions ยอดเยี่ยมหลายตัวช่วย Rails developers เขียน authentication ตัวยอดนิยมคือ Devise
Rails 8 ส่งมอบ authentication generators นี่ไม่ใช่ full authentication system แตเพียงพอช่วยให้คุณทำ critical parts (อย่าง security) ถูกต้อง มันขึ้นอยู่กับ developer ที่จะเขียน views จัดการ login และ user sign-up flow แต generators จะจัดการ sessions, password authentication และแม้แต่ password emails DHH พูดเล็กน้อยเกี่ยวกับว่าการเลือก exclude views ใน authenticators เป็น intentional choice เพื่อป้องกันไม่ให้ Rails apps ดูเหมือนกันหมด
การเพิ่ม generators ใหม่นี้ไม่ได้ simplify shipping applications โดยตรง แต่มันเสนอ first-party solution สำหรับปัญหา common ในการสร้างเว็บแอปพลิเคชันที่ Rails ขาดมานานเกินไป
Propshaft สำหรับ asset pipeline
หนึ่งใน biggest (under the hood) changes ใน Rails 8 คือการย้ายจาก Sprockets ไป Propshaft สำหรับ default asset pipeline Rails ยัง support Sprockets ถ้าคุณอยากหรือต้องใช้ แต new Rails 8 applications default ไป Propshaft
Propshaft เป็น very opinionated เกี่ยวกับ ไม่ bundling หรือ minifying assets เหมือน Rails มองหาทำให้ PaaS unnecessary มันก็พยายามทำให้ complicated build pipelines unnecessary เหมือนหลาย new defaults ใน Rails 8 คุณสามารถใช้ Propshaft กับ Rails รุ่นเก่า และยังใช้ Sprockets สำหรับ Rails 8 ได้!
SQLite และ Rails
แม้ SQLite ไม่ได้เป็นส่วนของ Rails โดยตรง Rails กำลัง lean บน SQLite มากขึ้นใน release นี้ SQLite เป็น serverless database engine ทำให้มัน simpler_than Postgres ถ้า Rails application ของคุณใช้ SQLite คุณไม่ต้องมี database process รันแยกจาก web process อย่างไรก็ตาม นี้ very much in line กับ mission ของ Rails 8 ทำให้ ship web applications เรียบง่าย
Rails 8 ส่งมอบ first-party support สำหรับ SQLite ให้แน่ใจว่ามัน powerful พอสำหรับ traditional database needs และ support ใหม่ database-backed Solid adapters
ทุกอย่างใหม่ใน Rails 8 เกี่ยวกับการทำให้ platforms less necessary
ถ้าคุณ upgrade existing Rails app ไป Rails 8 ไม่มีอะไรมากที่ต้องทำเพื่อ complete upgrade มีเพียง 몇 อย่างถูกลบ ส่วนใหญ่ใน Active Record ซึ่งมี deprecation notices มาพักหนึ่งแล้ว คุณสามารถ leverage ทุก "new in Rails 8" defaults เพื่อลดความซับซ้อนของ application deployments ได้ แตเป็น optional
Biggest changes ใน Rails 8 เป็นสำหรับ new Rails apps! New Rails apps จะ default ไป Solid Queue สำหรับ background jobs, Solid Cache สำหรับ caching, Solid Cable สำหรับ web sockets, Propshaft สำหรับ asset pipeline และ Kamal 2 สำหรับ deployments
Rails อยู่ใน mission ล่าสุดที่จะ compress complexity และให้ full-featured framework สำหรับทำ modern web apps Rails 8 ขยับไป beyond making web apps และเข้า shipping web apps ขณะยัง compatible กับ existing options
คุณสามารถใช้ all, some หรือ none ของ Rails 8 defaults และยังใช้ platform ได้ถ้าชอบ developer experience นั้น แต release นี้มุ่งให้คุณมี option ข้าม platform และ take more ownership ของ infrastructure ของคุณ
ถ้าคุณชอบบทความนี้ สมัคร Honeybadger newsletter สำหรับ Ruby และ Rails news และ tutorials เพิ่มเติมในกล่องจดหมาย!