Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เปิดตัว Rails 8:คุณสมบัติหลัก &อิสระในการปรับใช้

ในที่สุด Rails 8 ก็มาถึงแล้ว และมันกำลังสั่นสะเทือนไปในทางที่น่าตื่นเต้นทีเดียว หากคุณมีส่วนร่วมในชุมชน Rails อยู่แล้ว คุณอาจเคยได้ยินสโลแกน:"ไม่จำเป็นต้องใช้ PaaS"

นี่เป็นภารกิจที่ไม่ธรรมดา (แต่ก็ไม่น่าแปลกใจ) การเปิดตัวครั้งนี้เป็นเรื่องเกี่ยวกับการทำให้แอป Rails ของคุณใช้งานได้ง่ายขึ้นโดยไม่ต้องใช้แพลตฟอร์ม as-a-service (PaaS) ที่มีคุณลักษณะครบถ้วน

แพลตฟอร์มช่วยให้นักพัฒนาสามารถดาวน์โหลดแอปของตนบนเว็บได้โดยไม่ต้องจัดการโครงสร้างพื้นฐานพื้นฐานที่รันโค้ดของตน ธุรกิจต่างๆ เช่น Heroku, Render, Fly และ Railway ล้วนเป็นตัวเลือกยอดนิยมในชุมชน Rails นักพัฒนามักจะเต็มใจที่จะแลกค่าใช้จ่ายโฮสติ้งเพิ่มเติมสำหรับแพลตฟอร์มประสบการณ์ของนักพัฒนาที่เสนอให้ แต่การเปิดตัว Rails นี้ต้องการทำให้การแลกเปลี่ยนนั้นน่าดึงดูดน้อยลงเล็กน้อย

ในบทความนี้ เราจะตรวจสอบฟีเจอร์ใหม่และที่ได้รับการปรับปรุงที่ทำให้เป็นไปได้ สิ่งต่างๆ เช่น Solid Cache, Solid Queue และ Solid Cable เป็นสิ่งใหม่ใน Rails 8 และตัดการพึ่งพาบางส่วนที่เราเคยต้องการ (เช่น Redis) ขณะนี้ Kamal 2 เป็นค่าเริ่มต้นสำหรับการปรับใช้ และมีตัวสร้างการรับรองความถูกต้องใหม่ที่ไม่จำเป็นต้องใช้ gem อื่นอีกต่อไป เรามาเข้าเรื่องกันดีกว่า

Rails 8 เปลี่ยนแปลงอะไร

Rails (และโดยเฉพาะ Rails 8) ต้องการจริงๆ เพื่อให้คุณสามารถจัดส่งแอปพลิเคชันไปยังการใช้งานจริงได้ง่ายขึ้นโดยไม่ต้องจ่ายค่าแพลตฟอร์ม การเปลี่ยนแปลงส่วนใหญ่ใน Rails รุ่นนี้เกี่ยวข้องกับภารกิจดังกล่าว - ลดงานที่ใช้ในการโฮสต์แอปพลิเคชัน Rails ด้วยตัวเอง โดยไม่ต้องใช้ PaaS!

เปิดตัว Rails 8:คุณสมบัติหลัก &อิสระในการปรับใช้ เรามาดูการเปลี่ยนแปลงที่สำคัญแต่ละรายการกันดีกว่า

Solid Cache สำหรับแคชแบบไม่มี Redis

Rails ใช้ ActiveSupport เพื่อแคชสิ่งต่าง ๆ ซึ่งมีความสำคัญอย่างยิ่งต่อการทำให้เว็บแอปมีประสิทธิภาพ ในอดีตผู้คนพึ่งพา Redis ในเรื่องแคชเพราะมันรวดเร็วและเชื่อถือได้

Solid Cache เปิดตัวมาระยะหนึ่งแล้วในฐานะที่เก็บแคชที่ไม่มี Redis สำหรับ ActiveSupport มีการใช้งานที่ 37signals และอื่น ๆ มาระยะหนึ่งแล้ว และตอนนี้ Rails กำลังโปรโมตให้เป็นตัวเลือกเริ่มต้น เนื่องจากใช้ฐานข้อมูล (SQLite ตามค่าเริ่มต้น) สำหรับที่เก็บแคชแทน RAM คุณจึงมีโบนัสเพิ่มเติมคือสามารถแคชได้มากกว่าปกติมาก พื้นที่ฐานข้อมูลมีราคาถูกกว่า RAM ดังนั้นแม้ว่าการใช้ฐานข้อมูลเพื่อสำรองระบบแคชจะช้ากว่าการใช้ RAM แต่ความสามารถในการแคชสิ่งต่าง ๆ ได้นานขึ้นก็ทำให้บางแอปมีประสิทธิภาพมากยิ่งขึ้น

การแลกเปลี่ยนประสิทธิภาพนี้เหมาะสำหรับกรณีการใช้งานบางกรณี แต่อาจไม่เหมาะสำหรับกรณีอื่นๆ ดังนั้นจึงยังคงใช้หนึ่งในที่เก็บแคชอื่นได้อย่างง่ายดาย การนำความต้องการ Redis หรือ Memcached ออกโดยค่าเริ่มต้นจะทำให้คุณเข้าใกล้ภารกิจ "ไม่จำเป็นต้องใช้ PaaS" ที่ Rails เปิดอยู่อีกก้าวหนึ่ง

คิวที่มั่นคงสำหรับงานพื้นหลังที่ไม่มี Redis

คุณคงทราบแล้วว่า Rails ใช้ ActiveJob ไลบรารี่เพื่อให้คุณเขียนและรันงานพื้นหลังได้ง่ายขึ้น เช่นเดียวกับการแคช Rails ช่วยให้คุณสามารถเลือกแบ็กเอนด์ที่ขับเคลื่อน ActiveJob . หลายๆ คนชื่นชอบ Sidekiq หรือ Good Job แต่ตัวเลือกส่วนใหญ่ในปัจจุบันมีปัญหาสองประการ:

  • สิ่งเหล่านี้เป็นอีกปัจจัยหนึ่งที่ต้องพึ่งพาในการนำเข้า จัดการ และอาจต้องชำระเงิน
  • พวกเขาพึ่งพาบริการอื่นเช่น Redis (ซึ่งคุณต้องโฮสต์ จัดการ และอาจต้องจ่าย)

Solid Queue พยายามแก้ไขปัญหาทั้งสองนี้ด้วยการจัดการงานเบื้องหลังโดยไม่ต้องอาศัย Redis หากคุณเคยใช้ Sidekiq หรือผู้ให้บริการจัดคิวรายอื่นที่ต้องใช้ Redis Solid Queue เป็นอีกทางเลือกหนึ่งที่ช่วยลดความซับซ้อนและทำให้การโฮสต์ง่ายขึ้น เช่นเดียวกับ Solid Cache Solid Queue ใช้ฐานข้อมูลของแอปพลิเคชันแทน RAM เพื่อติดตามงานเบื้องหลัง เป็นอีกหนึ่งฟีเจอร์ที่ Rails มอบให้เป็นค่าเริ่มต้นเพื่อลดการพึ่งพาและทำให้การใช้งานจริงง่ายขึ้น

สายเคเบิลแข็งสำหรับซ็อกเก็ตเว็บที่ไม่มี Redis

Rails ใช้ Action Cable เพื่อให้นักพัฒนาสามารถใช้เว็บซ็อกเก็ตสำหรับคุณสมบัติแบบเรียลไทม์ได้อย่างง่ายดาย ในอดีต สิ่งนี้ต้องใช้ Redis คุณคงเดาได้ว่าเรื่องนี้จะเป็นยังไง!

ด้วยธีม 'Solid' Rails 8 มาพร้อมกับอะแดปเตอร์สำรองฐานข้อมูลเริ่มต้นอื่น คุณไม่จำเป็นต้องจำเป็น เพื่อใช้งาน แต่ถ้าคุณต้องการใช้เว็บซ็อกเก็ตและต้องการหลีกเลี่ยงการกำหนดค่าและบำรุงรักษา Redis นี่เป็นตัวเลือกจากบุคคลที่หนึ่งที่ยอดเยี่ยม เมื่อใช้งานร่วมกับ Solid Cache และ Solid Queue แล้ว Solid Cable ช่วยให้จัดส่งแอปพลิเคชัน Rails โดยไม่ต้องใช้ PaaS ได้ง่ายยิ่งขึ้น โดยไม่จำเป็นต้องใช้ Redis และพึ่งพาฐานข้อมูล

Kamal 2 เพื่อการปรับใช้ที่ง่ายขึ้น

คุณสมบัติใหม่ถัดไปใน Rails 8 ค่อนข้างแตกต่างจากอะแดปเตอร์ Solid อย่างไรก็ตาม Kamal (และโดยเฉพาะ Kamal 2) ทำให้การจัดส่งแอปพลิเคชันด้วยฮาร์ดแวร์ของคุณเองตรงไปตรงมามากขึ้น เนื่องจาก Docker ทำให้การปรับซอฟต์แวร์เป็นโมดูลเป็นเรื่องง่าย การมีซอฟต์แวร์สำหรับจัดส่งคอนเทนเนอร์ Docker โดยไม่คำนึงถึงภาษาจึงสมเหตุสมผล

ในความคิดของฉัน Kamal แม้ว่าจะจับคู่กับ Rails 8 ที่เหลือ แต่ก็ไม่สามารถสัมผัสประสบการณ์นักพัฒนาของแพลตฟอร์มส่วนใหญ่ได้จริงๆ อย่างไรก็ตาม มันทำให้ ง่ายขึ้นมาก เพื่อจัดส่งซอฟต์แวร์ไปยังเว็บเซิร์ฟเวอร์ของคุณเอง แม้ว่าคุณจะไม่ได้ใช้ Rails ก็ตาม! อาจไม่ใช่การทดแทน PaaS โดยสมบูรณ์ แต่เมื่อคุณตั้งค่าเริ่มต้นเสร็จแล้ว ให้เรียกใช้ kamal deploy เป็นการปรับปรุงอย่างมากเมื่อเทียบกับการติดตั้งใช้งานด้วยตัวเอง

ตัวสร้างการรับรองความถูกต้อง (ไม่มีอุปกรณ์!)

หากคุณกำลังสร้างแอป Rails ที่มี ผู้ใช้ คุณอาจจะต้องมีการตรวจสอบสิทธิ์ จนถึงตอนนี้ Rails ยังไม่ได้รวมการรับรองความถูกต้องเป็นส่วนหนึ่งของเฟรมเวิร์ก ชุมชนมีโซลูชันที่ยอดเยี่ยมหลายประการเพื่อช่วยให้นักพัฒนา Rails เขียนการตรวจสอบสิทธิ์ ซึ่งโซลูชันที่ได้รับความนิยมมากที่สุดคือ Devise

Rails 8 มาพร้อมกับ ตัวสร้างการรับรองความถูกต้อง . นี่ไม่ใช่ระบบการตรวจสอบความถูกต้องเต็มรูปแบบ แต่ก็เพียงพอแล้วที่จะช่วยให้คุณได้รับส่วนที่สำคัญ (เช่น ความปลอดภัย) อย่างถูกต้อง ขึ้นอยู่กับนักพัฒนาที่จะเขียนมุมมองเพื่อจัดการการเข้าสู่ระบบและขั้นตอนการลงทะเบียนผู้ใช้ แต่ตัวสร้างจะจัดการเซสชัน การตรวจสอบรหัสผ่าน และแม้แต่อีเมลรหัสผ่าน DHH ได้พูดคุยกันเล็กน้อยเกี่ยวกับวิธีที่ตัวเลือกในการแยกมุมมองในตัวตรวจสอบความถูกต้องนั้นมีจุดประสงค์เพื่อป้องกันไม่ให้แอป Rails ดูเหมือนกันทั้งหมด

การเพิ่มตัวสร้างใหม่เหล่านี้ไม่ได้ทำให้แอปพลิเคชันการจัดส่งง่ายขึ้นโดยตรง แต่จะนำเสนอโซลูชันจากบุคคลที่หนึ่งสำหรับปัญหาทั่วไปในการสร้างแอปพลิเคชันเว็บที่ Rails ขาดหายไปนานเกินไป

เพลาข้อเหวี่ยงสำหรับไปป์ไลน์สินทรัพย์

หนึ่งในการเปลี่ยนแปลงที่ใหญ่ที่สุด (ภายใต้ประทุน) ใน Rails 8 คือการย้ายจาก Sprockets ไปยัง Propshaft สำหรับไปป์ไลน์สินทรัพย์เริ่มต้น Rails ยังคงรองรับ Sprockets หากคุณต้องการหรือจำเป็นต้องใช้ แต่แอปพลิเคชัน Rails 8 8 ใหม่มีค่าเริ่มต้นเป็น Propshaft

Propshaft มีความคิดเห็น ไม่ อย่างมาก การรวมกลุ่มหรือการลดขนาดสินทรัพย์ เช่นเดียวกับที่ Rails ต้องการทำให้ PaaS ไม่จำเป็น มันก็พยายามสร้างไปป์ไลน์ที่ซับซ้อนโดยไม่จำเป็นเช่นกัน เช่นเดียวกับค่าเริ่มต้นใหม่อื่นๆ ใน Rails 8 คุณสามารถใช้ Propshaft กับ Rails เวอร์ชันเก่าได้ และยังคงใช้ Sprockets สำหรับ Rails 8 ได้!

SQLite และ Rails

แม้ว่า SQLite จะไม่ได้เป็นส่วนหนึ่งของ Rails อย่างแน่นอน แต่ Rails ก็พึ่งพา SQLite มากยิ่งขึ้นในการเปิดตัวครั้งนี้ SQLite เป็นเครื่องมือฐานข้อมูลแบบไร้เซิร์ฟเวอร์ ทำให้ง่ายกว่า Postgres หากแอปพลิเคชัน Rails ของคุณใช้ SQLite คุณไม่จำเป็นต้องมีกระบวนการฐานข้อมูลที่ทำงานแยกจากกระบวนการบนเว็บของคุณ แน่นอนว่าสิ่งนี้สอดคล้องกับพันธกิจของ Rails 8 อย่างมาก ทำให้การจัดส่งแอปพลิเคชันเว็บง่ายขึ้น

Rails 8 มาพร้อมกับการสนับสนุนจากบุคคลที่หนึ่งสำหรับ SQLite ทำให้มั่นใจได้ว่าจะมีประสิทธิภาพเพียงพอที่จะรองรับความต้องการฐานข้อมูลแบบดั้งเดิมของคุณและรองรับอะแดปเตอร์ Solid ใหม่ที่สนับสนุนฐานข้อมูล

ทุกสิ่งใหม่ใน Rails 8 คือการทำให้แพลตฟอร์มมีความจำเป็นน้อยลง

หากคุณกำลังอัปเกรดแอป Rails ที่มีอยู่เป็น Rails 8 คุณไม่จำเป็นต้องทำอะไรมากมายเพื่ออัปเกรดให้เสร็จสมบูรณ์ มีการลบออกเพียงไม่กี่อย่าง ส่วนใหญ่อยู่ใน Active Record ซึ่งมีการแจ้งการเลิกใช้งานมาระยะหนึ่งแล้ว แน่นอน คุณสามารถใช้ประโยชน์จากค่าเริ่มต้น "ใหม่ใน Rails 8" ทั้งหมดเพื่อทำให้การปรับใช้แอปพลิเคชันของคุณง่ายขึ้น แต่ก็เป็นทางเลือก

การเปลี่ยนแปลงครั้งใหญ่ที่สุดใน Rails 8 สำหรับแอพ Rails ใหม่! แอป Rails ใหม่จะมีค่าเริ่มต้นเป็น Solid Queue สำหรับงานเบื้องหลัง, Solid Cache สำหรับการแคช, Solid Cable สำหรับซ็อกเก็ตเว็บ, Propshaft สำหรับไปป์ไลน์สินทรัพย์ และ Kamal 2 สำหรับการปรับใช้

Rails ได้รับภารกิจเมื่อเร็วๆ นี้ในการบีบอัดความซับซ้อนและจัดเตรียมเฟรมเวิร์กที่มีคุณสมบัติครบถ้วนสำหรับการสร้างเว็บแอปสมัยใหม่ Rails 8 ก้าวไปไกลกว่าการสร้าง เว็บแอปและเข้าสู่ การจัดส่ง เว็บแอปในขณะที่ยังคงเข้ากันได้กับตัวเลือกที่มีอยู่

คุณสามารถใช้ค่าเริ่มต้นของ Rails 8 ทั้งหมด บางส่วน หรือไม่มีก็ได้ และยังคงใช้แพลตฟอร์มได้ หากคุณต้องการประสบการณ์ของนักพัฒนาซอฟต์แวร์ แต่การเปิดตัวนี้มีจุดมุ่งหมายเพื่อให้คุณมีตัวเลือกในการข้ามแพลตฟอร์มและเป็นเจ้าของโครงสร้างพื้นฐานของคุณมากขึ้น

หากคุณชอบบทความนี้ สมัครรับจดหมายข่าว Honeybadger เพื่อรับข่าวสารและบทช่วยสอน Ruby and Rails เพิ่มเติมในกล่องจดหมายของคุณ!