Ruby gem ที่ดีที่สุดที่คุณสามารถใช้ได้ในโปรเจ็กต์ Rails คืออะไร
นั่นคือสิ่งที่คุณจะได้ค้นพบในบทความนี้!
ฉันจะให้อัญมณีแก่คุณ 7 เม็ด แต่ ไม่ใช่อัญมณีเก่าที่คุณเคยเห็นเป็นล้านครั้ง ฉันจะแบ่งปันอัญมณีที่เป็นประโยชน์มากแต่ไม่ค่อยมีใครรู้จักให้คุณฟัง
แต่ก่อนที่เราจะทำอย่างนั้น…
คำเตือน
ฉันเคยเห็นนักพัฒนาที่ดึงอัญมณีมาเพื่อทุกสิ่ง
หากฟังดูเหมือนเป็นประโยชน์
โดยไม่ต้องเสียเวลาคิดสักนิดว่าอัญมณีนั้นแก้ปัญหาที่พวกเขามีหรือไม่ หากเป็นตัวเลือกที่ดีที่สุด ได้รับการดูแลเป็นอย่างดี &จัดทำเป็นเอกสาร ฯลฯ
นั่นเป็นความผิดพลาด
ทำไม?
เพราะยิ่งโปรเจกต์ของคุณพึ่งพาอะไรมากเท่าไหร่ ก็ยิ่งมีแนวโน้มที่จะพังเมื่อสิ่งต่างๆ เปลี่ยนไป
และสิ่งต่างๆ เปลี่ยนแปลงตลอดเวลา
เวอร์ชัน Rails ใหม่ เวอร์ชัน Ruby ใหม่ คุณลักษณะใหม่ ฯลฯ
ด้วยที่กล่าวว่า…
อัญมณีสามารถช่วยคุณได้มาก ช่วยคุณทำความสะอาดโค้ด และหลีกเลี่ยงปัญหาด้านความปลอดภัย ดังนั้นจงใช้อย่างชาญฉลาด!
ตอนนี้ :
เข้ารายการกันเถอะ
1. ค้นหาเส้นทางที่ตายแล้วเพื่อให้รหัสของคุณสะอาด
เมื่อแอปพลิเคชัน Rails ของคุณเติบโตขึ้น คุณจะสะสมเส้นทางได้มากขึ้นเรื่อยๆ
คุณจะเปลี่ยนรหัสและเส้นทางเหล่านี้บางเส้นทางไม่อัปเดต .
ไม่จำเป็นอีกต่อไป…
แต่พวกเขาจะอยู่ที่นั่นใน config/routes.rb
. ของคุณ ทำให้จัดการได้ยากขึ้น
คุณค้นหาเส้นทางที่จะลบได้อย่างไร
มีอัญมณีชื่อ traceroute
.
มันโหลดเส้นทางของคุณและเปรียบเทียบกับการกระทำของตัวควบคุมที่คุณกำหนดไว้
แต่ตอนนี้มีข้อจำกัดสองประการ :
- ใช้กับ Rails 6 ไม่ได้
- ตรวจไม่พบการกระทำของตัวควบคุมโดยนัย
ฉันส่งคำขอดึงเพื่อเพิ่มการรองรับ Rails 6 แต่ฉันก็คิดเวอร์ชันของตัวเองขึ้นมาซึ่งไม่มีข้อจำกัดเหล่านี้
คุณสามารถหาได้ที่นี่
2. ทำให้การย้ายถิ่นของคุณปลอดภัยยิ่งขึ้นเพื่อหลีกเลี่ยงปัญหา
การย้ายข้อมูล Rails อาจทำให้เกิดปัญหาได้มากมายหากทำผิด
ตัวอย่างเช่น :
การนำคอลัมน์ออกอาจทำให้เกิดปัญหาได้เนื่องจาก Rails มีแคชของคอลัมน์ และการเรียกใช้การย้ายข้อมูลจะไม่รีเซ็ตแคชนี้
ตัวอย่างอื่น :
หากคุณเพิ่มดัชนีและคุณกำลังเรียกใช้ PostgreSQL ทั้งตารางจะถูกล็อกจนกว่าการดำเนินการจะเสร็จสิ้น
ไม่ดีสำหรับผู้ใช้ของคุณ
แอปพลิเคชันของคุณจะไม่สามารถตอบสนองต่อคำขอที่ต้องทำงานกับตารางที่ล็อกได้
ข่าวดี?
คุณไม่จำเป็นต้องจำสิ่งเหล่านี้ทั้งหมด
ด้วยความช่วยเหลือของ strong_migrations
อัญมณี คุณจะรู้ได้เมื่อคุณมีการโยกย้ายที่ไม่ปลอดภัยเหล่านี้ก่อนที่จะทำการผลิต
3. ป้องกันการทำธุรกรรมที่ไม่ปลอดภัย
ธุรกรรมของ Rails ควรจะเป็นการดำเนินการ "ทั้งหมดหรือไม่มีเลย"
หน้าตาเป็นแบบนี้ :
Book.transaction do # ... end
แต่ถ้าคุณทำสิ่งที่อยู่นอกtransaction
การควบคุม เช่น การเขียนไปยังไฟล์ หรือการร้องขอ API ผลกระทบ "ทั้งหมดหรือไม่มีเลย" นี้จะไม่เป็นจริงอีกต่อไป
อย่างที่คุณจินตนาการได้ สิ่งนี้นำไปสู่ปัญหาทุกประเภท
วิธีแก้ไขคืออะไร
ไม่ใช่ไฮเทคมากนัก จริงๆ แล้วแค่หลีกเลี่ยง "ผลข้างเคียง" หรือทำสิ่งที่ส่งผลต่อ "โลกภายนอก" ของการทำธุรกรรม
ไอโซเลเตอร์เจมช่วยคุณได้
จะตรวจสอบธุรกรรมทั้งหมดของคุณเพื่อให้แน่ใจว่าปลอดภัย
สิ่งที่คุณต้องทำคือติดตั้งอัญมณี จากนั้นเมื่อตรวจพบ transaction
. ที่ไม่ดี มันจะทำให้เกิดข้อยกเว้น
ให้มันลอง!
4. ค้นหาการทดสอบที่ช้าและทำให้เร็วขึ้น
การทดสอบช้าไม่ใช่เรื่องสนุก
แต่มีเครื่องมือที่จะช่วยคุณค้นหาว่าเหตุใดการทดสอบจึงช้า คุณจึงแก้ไขได้!
หนึ่งในเครื่องมือเหล่านี้คือการรวมกันของ test-prof
+ ruby-prof
.
วิธีใช้งาน :
TEST_RUBY_PROF=1 rake
ผลลัพธ์ :
%self total self wait child calls name 43.21 2.001 2.001 0.000 0.000 1 Kernel#sleep 2.97 0.184 0.138 0.000 0.046 1640 Array#permutation 1.39 0.064 0.064 0.000 0.000 144 PG::Connection#async_exec
ที่นี่ฉันสามารถเห็นการโทร sleep
. ของฉันได้อย่างชัดเจน แต่อาจเป็นการเรียก API การอ่านไฟล์ขนาดใหญ่ การสืบค้น SQL ที่ช้า เป็นต้น
สิ่งที่คุณทำได้อีกอย่างคือใช้ตัวสร้างโปรไฟล์เหตุการณ์
ถูกใจสิ่งนี้ :
EVENT_PROF='sql.active_record' EVENT_PROF_EXAMPLES=1 rake
ซึ่งจะช่วยคุณค้นหาว่าการทดสอบใดที่เรียกใช้การสืบค้นที่ช้าที่สุด
อย่างไรก็ตาม Rails 6 เพิ่มการทดสอบแบบขนาน คุณต้องเปิดใช้งานสิ่งนี้ใน test/test_helpers.rb
หากคุณกำลังอัปเกรดโปรเจ็กต์ปัจจุบันของคุณ
5. ทำให้ข้อมูลของคุณสอดคล้องกันมากขึ้น
การตรวจสอบนั้นดีมาก
แต่ไม่ว่าคุณจะใช้เฟรมเวิร์กใดในการสร้างเว็บแอปพลิเคชัน
คุณสามารถข้ามการตรวจสอบของคุณได้ตลอดเวลาโดยการนำเข้าข้อมูลโดยตรงไปยังฐานข้อมูล สร้างบันทึกโดยใช้ SQL แบบดิบ หรือใช้วิธีบางอย่างใน ORM ของคุณที่ข้ามการตรวจสอบความถูกต้อง
กล่าวอีกนัยหนึ่ง…
การตรวจสอบของคุณปกป้องคุณจากข้อผิดพลาดของผู้ใช้เท่านั้น แต่ไม่สามารถป้องกันข้อผิดพลาดของนักพัฒนาได้
ข้อผิดพลาดของนักพัฒนาซอฟต์แวร์เหล่านี้อาจทำให้ข้อมูลของคุณไม่สอดคล้องกัน
ข่าวดี?
ฐานข้อมูล SQL สมัยใหม่ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดจะใช้ "ข้อจำกัด" ซึ่งเป็นชุดของกฎ เช่น การตรวจสอบ แต่ในระดับฐานข้อมูล
ดังนั้น หากคุณต้องการเพิ่มความสอดคล้องของข้อมูล คุณต้องการใช้ข้อจำกัดเหล่านี้
อัญมณีที่ช่วยคุณได้คือความสม่ำเสมอของฐานข้อมูล
วิธีใช้อัญมณีนี้
ขั้นแรก คุณต้องติดตั้งมัน ไม่มีอะไรลึกลับ
ประการที่สอง คุณเรียกใช้ bundle exec database_consistency
ในเทอร์มินัล ภายในโครงการที่คุณต้องการตรวจสอบ
มันจะสร้างรายงานแบบนี้ :
fail Comment title column should be required in the database fail Comment author column should be required in the database
จะเป็นอย่างไรต่อไป
เพิ่มข้อจำกัดฐานข้อมูลที่ขาดหายไป ในกรณีนี้ ไม่ใช่ null ด้วย change_column_null
การย้ายถิ่น
6. ถึงเวลาปรับโครงสร้างใหม่! ใครคือผู้กระทำผิดที่แย่ที่สุดในหลักจรรยาบรรณของคุณ?
ต้องการปรับปรุงโค้ดของคุณ แต่ไม่แน่ใจว่าจะเริ่มต้นจากตรงไหน
รับตัวชี้วัด!
มีเมตริกโค้ดมากมาย เช่น ความซับซ้อนของไซโคลแมติกและการปั่นป่วน Churn จะดูอัตราการเปลี่ยนแปลงเมื่อเวลาผ่านไปในโค้ดของคุณ
อย่างไร
ใช้ประวัติการเปลี่ยนแปลง git ของคุณ
ผลลัพธ์?
รายการไฟล์ที่เปลี่ยนแปลงมากที่สุด
หากคุณใช้เวลา 90% ในการเปลี่ยนUser
model... อาจเป็นไฟล์ขนาดใหญ่ที่มีวิธีการแบบยาว ตัวเลือกที่ดีสำหรับการปรับโครงสร้างใหม่!
อัญมณีที่ช่วยคุณค้นหาไฟล์ที่เปลี่ยนแปลงตลอดเวลาเหล่านี้เรียกว่า attractor
.
เรียกใช้แบบนี้ :
attractor report -p app
สร้างรายงาน HTML และรายการไฟล์ที่มีการรบกวนสูงซึ่งคุณสามารถใช้เพื่อเน้นความพยายามในการปรับโครงสร้างใหม่ได้
ของดี!
7. ค้นหาว่ารหัสใดที่ใช้ในการผลิตและรหัสใดไม่ใช่
จบด้วยเครื่องมืออื่นเพื่อช่วยปรับปรุงโค้ดของคุณกันเถอะ
เรียกว่า coverband
.
หากคุณเรียกใช้อัญมณีนี้ในเวอร์ชันที่ใช้งานจริง (โอเวอร์เฮดต่ำ) คุณจะได้รับรายงานความครอบคลุมว่าโค้ดใดกำลังทำงานอยู่
คุณยังติดตามการดูที่ไม่ได้ใช้งานได้อีกด้วย!
ซึ่งจะช่วยให้คุณตัดสินใจได้เมื่อลบโค้ดและทำความสะอาดโปรเจ็กต์
อย่าปล่อยให้โค้ดที่ไม่ได้ใช้สร้างขึ้น!
สรุป
คุณได้เรียนรู้เกี่ยวกับ Ruby gem อันทรงพลังและไม่ค่อยมีใครรู้จัก 7 เม็ด ซึ่งคุณสามารถใช้ในโปรเจ็กต์ (ส่วนใหญ่เป็น Rails) ของคุณ เพื่อทำให้การทดสอบของคุณเร็วขึ้น ปรับปรุงโค้ดของคุณ และเพิ่มความปลอดภัย
จำคำเตือนเล็กน้อยเกี่ยวกับการใช้อัญมณีในทางที่ผิด แต่อย่าปล่อยให้สิ่งนั้นหยุดคุณจากการลองอัญมณีใหม่
หากคุณต้องการพัฒนาทักษะ Ruby และสนับสนุนบล็อก ลองพิจารณาซื้อ Ruby Deep Dive หนังสือ Ruby ของฉัน 🙂
ขอบคุณสำหรับการอ่าน!