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

เปิดตัว Rails 7:คุณสมบัติหลักและการปรับปรุงที่กำลังจะเกิดขึ้น

Rails 7 อยู่ใกล้แค่เอื้อม เราไม่มีวันวางจำหน่ายที่ได้รับการยืนยัน แต่คาดว่าจะวางจำหน่ายก่อนวันคริสต์มาส ดังนั้นจึงอีกไม่นานนัก เวอร์ชันล่าสุด ณ วันที่เผยแพร่ของโพสต์นี้คือ 06 ซึ่งเป็นผู้สมัครรุ่นแรก Basecamp, HEY, Github และ Shopify ต่างใช้งาน Rails 7 alpha ในการผลิต ดังนั้นเราจึงคาดหวังได้ว่าแม้แต่ผู้สมัครที่จะเปิดตัวจะค่อนข้างเสถียร

ในโพสต์นี้ เราจะดูคุณสมบัติใหม่และการเปลี่ยนแปลงบางอย่างที่ Rails 7 จะนำมา

ไม่จำเป็นต้องใช้โหนดและ Webpack

ใช่แล้ว คุณอ่านถูกต้องแล้ว! JavaScript ใน Rails 7 จะไม่ต้องใช้ NodeJS หรือ Webpack อีกต่อไป และคุณยังสามารถใช้แพ็คเกจ npm ได้

การทรานสไพล์ ES6 ด้วย Babel และการรวมกับ Webpack จำเป็นต้องมีการตั้งค่าจำนวนมาก ในขณะที่ Rails สนับสนุนมันค่อนข้างดีด้วย 18 gem ซึ่งนำสัมภาระมามากมาย เป็นการยากที่จะเข้าใจและทำการเปลี่ยนแปลงใด ๆ โดยเฉพาะอย่างยิ่งในขณะที่ยังคงความสามารถในการอัปเกรดอยู่

ตอนนี้เป็นค่าเริ่มต้นสำหรับแอปใหม่ที่สร้างด้วย 25 คือการใช้แผนที่นำเข้าผ่าน 38 gem.แทนที่จะเขียน 46 และการติดตั้งการพึ่งพาด้วย 56 หรือ 61 คุณใช้ 79 CLI เพื่อปักหมุด (หรือเลิกปักหมุดหรืออัปเดต) การอ้างอิง

ตัวอย่างเช่น ในการติดตั้ง 88 :

 

สิ่งนี้จะเพิ่มบรรทัดใน 97 ชอบ:

 

ในโค้ด JavaScript ของคุณ คุณสามารถใช้ทุกอย่างต่อไปได้เหมือนเดิม:

 

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

แต่นี่ก็หมายความว่าคุณจะไม่สามารถใช้ TypeScript หรือ JSX ได้เนื่องจากต้องมีการแปลงเป็น JS ก่อนใช้งาน

ดังนั้น หากคุณต้องการใช้ React กับ JSX คุณยังคงต้องถอยกลับไปใช้การตั้งค่าอื่น (โดยใช้ webpack/rollup/esbuild)

Rails 7 สามารถทำสิ่งนี้เพื่อคุณได้ สิ่งที่คุณต้องมีคือคำสั่งเดียวสำหรับกลยุทธ์ที่คุณเลือก:

 

เทอร์โบลิงก์และ UJS แทนที่ด้วยเทอร์โบและกระตุ้น

แอปพลิเคชันที่สร้างด้วย Rails 7 จะได้รับ Turbo และ Stimulus (จาก Hotwire) เป็นค่าเริ่มต้น แทนที่จะเป็น Turbolinks และ UJS Hotwire เป็นแนวทางใหม่ที่มอบการอัปเดตที่รวดเร็วให้กับ DOM โดยการส่ง HTML ผ่านทางสาย

การเข้ารหัสที่ชั้นฐานข้อมูล

Rails 7 อนุญาตให้ทำเครื่องหมายฟิลด์ฐานข้อมูลบางฟิลด์ว่าเข้ารหัสโดยใช้ 101 วิธีการบน 110 . ซึ่งหมายความว่าหลังจากการตั้งค่าเริ่มต้น คุณสามารถเขียนโค้ดดังนี้:

 

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

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

การสืบค้นแบบอะซิงโครนัส

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

 

การดำเนินการนี้จะเริ่มการสืบค้นทั้งสองในเบื้องหลังพร้อมกัน ดังนั้น หากการค้นหาแต่ละครั้งใช้เวลา 200 มิลลิวินาที เวลาทั้งหมดที่ใช้ในการดึงข้อมูลจะอยู่ที่ ~200 มิลลิวินาที แทนที่จะเป็น 400 มิลลิวินาที หากดึงข้อมูลตามลำดับ

โหมด Zeitwerk สำหรับ Rails 7

นี่เป็นการเปลี่ยนแปลงครั้งใหญ่สำหรับแอปพลิเคชันรุ่นเก่าที่ยังคงใช้งานตัวโหลดแบบคลาสสิก แอปพลิเคชัน Rails 7 ทั้งหมดต้องใช้โหมด Zeitwerk แต่สวิตช์นั้นค่อนข้างง่าย ดูคู่มือการอัปเกรด Zeitwerk ฉบับเต็ม

การอัปเดต Rails 7 อื่นๆ

ลองงานใหม่ไม่จำกัดครั้ง

ขณะนี้ ActiveJob อนุญาตให้ส่งผ่าน 155 เป็น 164 พารามิเตอร์บน 176 . Rails จะพยายามทำงานต่อไปโดยไม่มีจำนวนครั้งสูงสุด

 

ตัวแปรที่มีชื่อ

ตอนนี้คุณสามารถตั้งชื่อตัวแปรใน 187 แทนที่จะระบุขนาดในทุกการเข้าถึง

 

แฮชเป็นแอตทริบิวต์ HTML

มี 190 ใหม่ วิธีการใช้ในมุมมองที่แปลแฮชเป็นแอตทริบิวต์ HTML:

 

จะผลิต

 

ทับทิม 204

ค่าเริ่มต้นใหม่สำหรับการดีบักได้เปลี่ยนจาก 214 ไปที่ 226 อัญมณี

แทนที่จะเรียก 238 ตอนนี้คุณต้องโทรไปที่ 247 ในโค้ดเพื่อเข้าสู่เซสชันการดีบัก

ยืนยันบันทึกเดี่ยวด้วย 252

เมื่อสอบถามบันทึก คุณสามารถโทรไปที่ 265 ได้แล้ว หรือ 279 (แทนที่จะเป็น 283 หรือ 297 ) เมื่อคุณต้องการยืนยันว่าแบบสอบถามควรตรงกับระเบียนเดียวเท่านั้น

 

ตรวจสอบการมี/ไม่มีสมาคม

ตอนนี้เราสามารถใช้ 306 ได้แล้ว เพื่อตรวจสอบว่ามีการเชื่อมโยงอยู่ในบันทึกหรือไม่ แทนที่จะเข้าร่วมและตรวจสอบการมีอยู่ของรหัส

 

สตรีมไฟล์ที่สร้างจากการทำงานของคอนโทรลเลอร์

ตอนนี้คุณสามารถใช้ 314 ภายในการดำเนินการของคอนโทรลเลอร์เพื่อเริ่มการสตรีมไฟล์ที่กำลังสร้างขึ้นทันที

 

นี่เป็นการตอบกลับทันที (บางส่วน) แก่ผู้ใช้ เพื่อให้พวกเขารู้ว่ามีบางอย่างเกิดขึ้น และมีประโยชน์เพิ่มเติมหากคุณปรับใช้บน Heroku

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

การอัพเกรดเป็น Rails 7

เช่นเดียวกับ Rails เวอร์ชันก่อนหน้า การอัพเกรดทำได้ง่าย แม้ว่าเราจะยังไม่มีคู่มือการอัปเกรดอย่างเป็นทางการ แต่ขั้นตอนจะยังคงเหมือนเดิม:

  1. เปลี่ยนหมายเลขเวอร์ชัน Rails ใน Gemfile (320 ณ วันที่เผยแพร่) และเรียกใช้ 331 .
  2. เรียกใช้ 341 . ปฏิบัติตาม CLI แบบโต้ตอบและเพิ่ม/แทนที่/แก้ไขไฟล์ตามต้องการ
  3. ทำการทดสอบและยืนยันว่าทุกอย่างทำงานได้ตามที่คาดไว้

สรุป

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

หากคุณยังคงใช้ Rails 6 หรือต่ำกว่า โปรดทราบว่าใน Rails 7 รุ่นสุดท้าย Rails 6.1 จะเข้าสู่โหมด "ปัญหาด้านความปลอดภัยเท่านั้น" และจะไม่ได้รับการแก้ไขข้อบกพร่องอีกต่อไป นอกจากนี้ยังจะทำเครื่องหมาย EOL สำหรับ Rails 5.2 ด้วย เนื่องจากจะไม่ได้รับการแก้ไขใดๆ อีกต่อไป

ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! เปิดตัว Rails 7:คุณสมบัติหลักและการปรับปรุงที่กำลังจะเกิดขึ้น

พุลกิต โกยาล

Pulkit ผู้เขียนรับเชิญของเราเป็นวิศวกรและที่ปรึกษาอาวุโสด้านฟูลสแต็ค ในเวลาว่าง เขาเขียนเกี่ยวกับประสบการณ์ของเขาในบล็อก

บทความทั้งหมดโดย Pulkit Goyal