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

7 Great Ruby Gems ที่คนส่วนใหญ่ไม่เคยได้ยินเกี่ยวกับ

Ruby gem ที่ดีที่สุดที่คุณสามารถใช้ได้ในโปรเจ็กต์ Rails คืออะไร

นั่นคือสิ่งที่คุณจะได้ค้นพบในบทความนี้!

ฉันจะให้อัญมณีแก่คุณ 7 เม็ด แต่ ไม่ใช่อัญมณีเก่าที่คุณเคยเห็นเป็นล้านครั้ง ฉันจะแบ่งปันอัญมณีที่เป็นประโยชน์มากแต่ไม่ค่อยมีใครรู้จักให้คุณฟัง

แต่ก่อนที่เราจะทำอย่างนั้น…

คำเตือน

ฉันเคยเห็นนักพัฒนาที่ดึงอัญมณีมาเพื่อทุกสิ่ง

หากฟังดูเหมือนเป็นประโยชน์

โดยไม่ต้องเสียเวลาคิดสักนิดว่าอัญมณีนั้นแก้ปัญหาที่พวกเขามีหรือไม่ หากเป็นตัวเลือกที่ดีที่สุด ได้รับการดูแลเป็นอย่างดี &จัดทำเป็นเอกสาร ฯลฯ

นั่นเป็นความผิดพลาด

ทำไม?

เพราะยิ่งโปรเจกต์ของคุณพึ่งพาอะไรมากเท่าไหร่ ก็ยิ่งมีแนวโน้มที่จะพังเมื่อสิ่งต่างๆ เปลี่ยนไป

และสิ่งต่างๆ เปลี่ยนแปลงตลอดเวลา

เวอร์ชัน Rails ใหม่ เวอร์ชัน Ruby ใหม่ คุณลักษณะใหม่ ฯลฯ

ด้วยที่กล่าวว่า…

อัญมณีสามารถช่วยคุณได้มาก ช่วยคุณทำความสะอาดโค้ด และหลีกเลี่ยงปัญหาด้านความปลอดภัย ดังนั้นจงใช้อย่างชาญฉลาด!

ตอนนี้ :

เข้ารายการกันเถอะ

1. ค้นหาเส้นทางที่ตายแล้วเพื่อให้รหัสของคุณสะอาด

เมื่อแอปพลิเคชัน Rails ของคุณเติบโตขึ้น คุณจะสะสมเส้นทางได้มากขึ้นเรื่อยๆ

คุณจะเปลี่ยนรหัสและเส้นทางเหล่านี้บางเส้นทางไม่อัปเดต .

ไม่จำเป็นอีกต่อไป…

แต่พวกเขาจะอยู่ที่นั่นใน config/routes.rb . ของคุณ ทำให้จัดการได้ยากขึ้น

คุณค้นหาเส้นทางที่จะลบได้อย่างไร

มีอัญมณีชื่อ traceroute .

มันโหลดเส้นทางของคุณและเปรียบเทียบกับการกระทำของตัวควบคุมที่คุณกำหนดไว้

แต่ตอนนี้มีข้อจำกัดสองประการ :

  1. ใช้กับ Rails 6 ไม่ได้
  2. ตรวจไม่พบการกระทำของตัวควบคุมโดยนัย

ฉันส่งคำขอดึงเพื่อเพิ่มการรองรับ 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 .

หากคุณเรียกใช้อัญมณีนี้ในเวอร์ชันที่ใช้งานจริง (โอเวอร์เฮดต่ำ) คุณจะได้รับรายงานความครอบคลุมว่าโค้ดใดกำลังทำงานอยู่

คุณยังติดตามการดูที่ไม่ได้ใช้งานได้อีกด้วย!

7 Great Ruby Gems ที่คนส่วนใหญ่ไม่เคยได้ยินเกี่ยวกับ

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

อย่าปล่อยให้โค้ดที่ไม่ได้ใช้สร้างขึ้น!

สรุป

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

จำคำเตือนเล็กน้อยเกี่ยวกับการใช้อัญมณีในทางที่ผิด แต่อย่าปล่อยให้สิ่งนั้นหยุดคุณจากการลองอัญมณีใหม่

หากคุณต้องการพัฒนาทักษะ Ruby และสนับสนุนบล็อก ลองพิจารณาซื้อ Ruby Deep Dive หนังสือ Ruby ของฉัน 🙂

ขอบคุณสำหรับการอ่าน!