portaldacalheta.pt
  • หลัก
  • การจัดการโครงการ
  • การเพิ่มขึ้นของระยะไกล
  • การบริหารโครงการ
  • เครื่องมือและบทช่วยสอน
ส่วนหน้าของเว็บ

Buggy Rails Code: 10 ข้อผิดพลาดที่พบบ่อยที่สุดที่ Rails Developers ทำ



ทับทิมบนราง (“ Rails”) เป็นเฟรมเวิร์กโอเพนซอร์สยอดนิยมโดยใช้ ทับทิม ภาษาโปรแกรมที่พยายามทำให้กระบวนการพัฒนาเว็บแอปพลิเคชันง่ายและคล่องตัว

รางถูกสร้างขึ้นบนหลักการของ การประชุมมากกว่าการกำหนดค่า . พูดง่ายๆก็คือตามค่าเริ่มต้น Rails จะถือว่ามันเป็น นักพัฒนาผู้เชี่ยวชาญ จะเป็นไปตามแนวทางปฏิบัติที่ดีที่สุด 'มาตรฐาน' (สำหรับสิ่งต่างๆเช่นการตั้งชื่อโครงสร้างรหัสและอื่น ๆ ) และหากคุณทำสิ่งต่างๆจะทำงานให้คุณ 'อัตโนมัติอย่างน่าอัศจรรย์' โดยที่คุณไม่จำเป็นต้องระบุรายละเอียดเหล่านี้ แม้ว่ากระบวนทัศน์นี้จะมีข้อดี แต่ก็ไม่ผิดพลาดด้วยเช่นกัน สิ่งที่น่าสังเกตอย่างยิ่งคือ“ เวทมนตร์” ที่เกิดขึ้นเบื้องหลังในเฟรมเวิร์กบางครั้งอาจนำไปสู่ความบังเอิญสับสนและ“ เกิดอะไรขึ้น?” ประเภทของปัญหา นอกจากนี้ยังสามารถมีการแบ่งส่วนที่ไม่พึงปรารถนาเกี่ยวกับความปลอดภัยและประสิทธิภาพ



ดังนั้นในขณะที่ Rails ใช้งานง่าย แต่ก็ไม่ยากที่จะใช้ในทางที่ผิด บทช่วยสอนนี้กล่าวถึงปัญหา Rails ทั่วไป 10 ประการรวมถึงวิธีหลีกเลี่ยงปัญหาเหล่านี้และปัญหาที่ทำให้เกิด



ข้อผิดพลาดทั่วไป # 1: การใส่ตรรกะมากเกินไปในคอนโทรลเลอร์

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



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

  • การจัดการเซสชันและคุกกี้ ซึ่งอาจรวมถึง การพิสูจน์ตัวตน / การอนุญาต หรือการประมวลผลคุกกี้เพิ่มเติมที่คุณต้องทำ
  • การเลือกรุ่น ตรรกะสำหรับการค้นหาวัตถุโมเดลที่ถูกต้องโดยให้พารามิเตอร์ที่ส่งผ่านจากคำขอ ตามหลักการแล้วนี่ควรเป็นการเรียกใช้วิธีการค้นหาเดียวที่ตั้งค่าตัวแปรอินสแตนซ์ที่จะใช้ในภายหลังเพื่อแสดงการตอบสนอง
  • ร้องขอการจัดการพารามิเตอร์ การรวบรวมพารามิเตอร์การร้องขอและการเรียกใช้เมธอดโมเดลที่เหมาะสมเพื่อคงอยู่
  • การแสดงผล / การเปลี่ยนเส้นทาง การแสดงผล (html, xml, json ฯลฯ ) หรือการเปลี่ยนเส้นทางตามความเหมาะสม

แม้ว่าสิ่งนี้จะยังคงผลักดันขีด จำกัด ของหลักการความรับผิดชอบเดียว แต่ก็เป็นประเภทของขั้นต่ำที่ไม่จำเป็นที่เฟรมเวิร์ก Rails กำหนดให้เรามีในคอนโทรลเลอร์



ข้อผิดพลาดทั่วไป # 2: ใส่ตรรกะมากเกินไปในมุมมอง

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

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



Welcome, Guest

วิธีที่ดีกว่าในการจัดการบางสิ่งเช่นนี้คือตรวจสอบให้แน่ใจว่าวัตถุส่งคืนโดย current_user คือ เสมอ ตั้งค่าไม่ว่าจะมีใครบางคนเข้าสู่ระบบหรือไม่และตอบสนองวิธีการที่ใช้ในมุมมองด้วยวิธีที่สมเหตุสมผล (บางครั้งเรียกว่าวัตถุว่าง) ตัวอย่างเช่นคุณอาจกำหนด current_user ผู้ช่วยใน app/controllers/application_controller แบบนี้:

require 'ostruct' helper_method :current_user def current_user @current_user ||= User.find session[:user_id] if session[:user_id] if @current_user @current_user else OpenStruct.new(name: 'Guest') end end

จากนั้นจะช่วยให้คุณสามารถแทนที่ตัวอย่างโค้ดมุมมองก่อนหน้าด้วยโค้ดบรรทัดเดียวนี้:



Welcome,

แนวทางปฏิบัติที่ดีที่สุดสองสามข้อที่แนะนำเพิ่มเติม:

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

ข้อผิดพลาดทั่วไป # 3: ใส่ตรรกะมากเกินไปในโมเดล

ได้รับคำแนะนำในการลดตรรกะในมุมมองและตัวควบคุมให้เหลือเพียงที่เดียวในไฟล์ สถาปัตยกรรม MVC ที่จะใส่ตรรกะทั้งหมดนั้นจะอยู่ในแบบจำลองใช่ไหม?



ก็ไม่เชิง

มากมาย นักพัฒนา Rails ทำผิดพลาดนี้และจบลงด้วยการติดทุกอย่างใน ActiveRecord คลาสโมเดลที่นำไปสู่ไฟล์ Mongo ที่ไม่เพียง แต่ละเมิดหลักการความรับผิดชอบเดียว แต่ยังเป็นฝันร้ายในการบำรุงรักษาอีกด้วย



ฟังก์ชันการทำงานเช่นการสร้างการแจ้งเตือนทางอีเมลการเชื่อมต่อกับบริการภายนอกการแปลงเป็นรูปแบบข้อมูลอื่น ๆ และสิ่งที่คล้ายกันนั้นไม่เกี่ยวข้องกับความรับผิดชอบหลักของ ActiveRecord แบบจำลองที่ควรทำมากกว่าการค้นหาและคงอยู่ข้อมูลในฐานข้อมูล

ดังนั้นหากตรรกะไม่ควรไปอยู่ในมุมมองและไม่ควรไปอยู่ในคอนโทรลเลอร์และไม่ควรอยู่ในโมเดลแล้วควรไปที่ใด

ป้อน วัตถุเก่า ๆ ของ Ruby (โปโร). ด้วยกรอบงานที่ครอบคลุมเช่น Rails นักพัฒนารุ่นใหม่มักไม่เต็มใจที่จะสร้างชั้นเรียนของตนเองนอกกรอบงาน อย่างไรก็ตามการย้ายตรรกะออกจากโมเดลไปยังโพโรมักเป็นเพียงสิ่งที่แพทย์สั่งให้หลีกเลี่ยงโมเดลที่ซับซ้อนเกินไป ด้วย PORO คุณสามารถห่อหุ้มสิ่งต่างๆเช่นการแจ้งเตือนทางอีเมลหรือการโต้ตอบกับ API ในชั้นเรียนของตนเองแทนที่จะรวมไว้ใน ActiveRecord แบบ.

ทำไมเราต้องการ devops

ด้วยเหตุนี้โดยทั่วไปแล้วตรรกะเดียวที่ควรคงอยู่ในโมเดลของคุณคือ:

  • ActiveRecord การกำหนดค่า (เช่นความสัมพันธ์และการตรวจสอบความถูกต้อง)
  • วิธีการกลายพันธุ์อย่างง่าย เพื่อห่อหุ้มการอัปเดตแอตทริบิวต์จำนวนหนึ่งและบันทึกไว้ในฐานข้อมูล
  • เข้าถึง Wrapper เพื่อซ่อนข้อมูลโมเดลภายใน (เช่น a full_name วิธีที่รวมฟิลด์ first_name และ last_name ในฐานข้อมูล)
  • ข้อความค้นหาที่ซับซ้อน (นั่นคือซับซ้อนกว่าธรรมดา find); โดยทั่วไปคุณไม่ควรใช้ where วิธีการหรือวิธีการสร้างแบบสอบถามอื่น ๆ เช่นนี้นอกคลาสแบบจำลองเอง
ที่เกี่ยวข้อง: 8 Essential Ruby on Rails คำถามสัมภาษณ์

ข้อผิดพลาดทั่วไป # 4: การใช้คลาสตัวช่วยทั่วไปเป็นที่ทิ้งขยะ

ข้อผิดพลาดนี้เป็นข้อพิสูจน์ที่ผิดพลาด # 3 ข้างต้น ตามที่กล่าวไว้กรอบงาน Rails ให้ความสำคัญกับส่วนประกอบที่มีชื่อ (เช่นโมเดลมุมมองและตัวควบคุม) ของเฟรมเวิร์ก MVC มีคำจำกัดความที่ดีพอสมควรเกี่ยวกับประเภทของสิ่งต่างๆที่อยู่ในคลาสของแต่ละองค์ประกอบเหล่านี้ แต่บางครั้งเราอาจต้องการวิธีการที่ดูเหมือนจะไม่เข้ากับสามอย่างใด

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

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

ข้อผิดพลาดทั่วไป # 5: ใช้อัญมณีมากเกินไป

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

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

โปรดจำไว้ว่าอัญมณีแต่ละชิ้นที่คุณนำเข้ามาในแอปพลิเคชันของคุณอาจมีการพึ่งพาอัญมณีอื่น ๆ และอาจมีการพึ่งพาอัญมณีอื่น ๆ และอื่น ๆ การเพิ่มอัญมณีอื่น ๆ อาจมีผลต่อการทบต้น ตัวอย่างเช่นการเพิ่มไฟล์ rails_admin อัญมณีจะนำอัญมณีเข้ามาอีก 11 อัญมณีเพิ่มขึ้นมากกว่า 10% จากการติดตั้ง Rails พื้นฐาน

จากการเขียนนี้การติดตั้ง Rails 4.1.0 ใหม่จะมี 43 อัญมณีใน Gemfile.lock ไฟล์. เห็นได้ชัดว่ามีมากกว่าที่รวมอยู่ใน Gemfile และแสดงถึงอัญมณีทั้งหมดที่อัญมณี Rails มาตรฐานจำนวนหนึ่งหยิบมาเป็นที่พึ่งพา

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

ข้อผิดพลาดทั่วไป # 6: ละเว้นไฟล์บันทึกของคุณ

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

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

ตัวอย่างหนึ่งที่คุณมักจะใช้เรียกว่าไฟล์ ปัญหาการสืบค้น N + 1 . แม้ว่าปัญหาจะเป็นที่เข้าใจกันดี แต่วิธีเดียวที่แท้จริงในการสังเกตว่าเกิดขึ้นคือการตรวจสอบการสืบค้น SQL ในไฟล์บันทึกของคุณ

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

def comments_for_top_three_posts posts = Post.limit(3) posts.flat_map do |post| post.comments.to_a end end

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

Started GET '/posts/some_comments' for 127.0.0.1 at 2014-05-20 20:05:13 -0700 Processing by PostsController#some_comments as HTML Post Load (0.4ms) SELECT 'posts'.* FROM 'posts' LIMIT 3 Comment Load (5.6ms) ELECT 'comments'.* FROM 'comments' WHERE 'comments'.'post_id' = ? [['post_id', 1]] Comment Load (0.4ms) SELECT 'comments'.* FROM 'comments' WHERE 'comments'.'post_id' = ? [['post_id', 2]] Comment Load (1.5ms) SELECT 'comments'.* FROM 'comments' WHERE 'comments'.'post_id' = ? [['post_id', 3]] Rendered posts/some_comments.html.erb within layouts/application (12.5ms) Completed 200 OK in 581ms (Views: 225.8ms | ActiveRecord: 10.0ms)

ActiveRecord ’ส กำลังโหลด ความสามารถใน Rails ทำให้สามารถลดจำนวนคิวรีลงได้มากโดยให้คุณระบุ ล่วงหน้า การเชื่อมโยงทั้งหมดที่จะโหลด ซึ่งทำได้โดยเรียก includes (หรือ preload) บนวัตถุ Arel (ActiveRecord::Relation) ที่กำลังสร้าง ด้วย includes, ActiveRecord ตรวจสอบให้แน่ใจว่าการเชื่อมโยงที่ระบุทั้งหมดถูกโหลดโดยใช้จำนวนการสืบค้นขั้นต่ำที่เป็นไปได้ เช่น.:

def comments_for_top_three_posts posts = Post.includes(:comments).limit(3) posts.flat_map do |post| post.comments.to_a end end

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

Started GET '/posts/some_comments' for 127.0.0.1 at 2014-05-20 20:05:18 -0700 Processing by PostsController#some_comments as HTML Post Load (0.5ms) SELECT 'posts'.* FROM 'posts' LIMIT 3 Comment Load (4.4ms) SELECT 'comments'.* FROM 'comments' WHERE'comments '.'post_id' IN (1, 2, 3) Rendered posts/some_comments.html.erb within layouts/application (12.2ms) Completed 200 OK in 560ms (Views: 219.3ms | ActiveRecord: 5.0ms)

มีประสิทธิภาพมากขึ้น

วิธีแก้ปัญหา N + 1 นี้มีไว้เพื่อเป็นเพียงตัวอย่างของความไร้ประสิทธิภาพที่สามารถเกิดขึ้นได้ในแอปพลิเคชันของคุณหากคุณไม่ได้รับการเอาใจใส่อย่างเพียงพอ ประเด็นสำคัญคือคุณควรตรวจสอบการพัฒนาและทดสอบไฟล์บันทึกระหว่างการพัฒนาเพื่อตรวจสอบความไร้ประสิทธิภาพ (และที่อยู่!) ในโค้ดที่สร้างคำตอบของคุณ

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

หากคุณพบว่าไฟล์บันทึกของคุณอุดตันด้วยข้อมูลมากมายที่คุณไม่ต้องการ ที่นี่ มีบางสิ่งที่คุณสามารถทำได้เพื่อล้างข้อมูลเหล่านี้ (เทคนิคที่ใช้ในการพัฒนาเช่นเดียวกับบันทึกการผลิต)

ข้อผิดพลาดทั่วไป # 7: ขาดการทดสอบอัตโนมัติ

Ruby และ Rails ให้ความสามารถในการทดสอบอัตโนมัติที่มีประสิทธิภาพตามค่าเริ่มต้น นักพัฒนา Rails หลายคนเขียนการทดสอบที่ซับซ้อนมากโดยใช้ สไตล์ TDD และ BDD และใช้ประโยชน์จากกรอบการทดสอบที่ทรงพลังยิ่งขึ้นด้วยอัญมณีเช่น rspec และ แตงกวา .

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

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

ข้อผิดพลาดทั่วไป # 8: การปิดกั้นการโทรไปยังบริการภายนอก

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

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

  • งานล่าช้า
  • สวัสดิการ
  • Sidekiq

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

ข้อผิดพลาดทั่วไป # 9: แต่งงานกับการย้ายฐานข้อมูลที่มีอยู่

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

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

Rails สร้างการแสดงสคีมาปัจจุบันของคุณในไฟล์ชื่อ db/schema.rb (โดยค่าเริ่มต้น) ซึ่งโดยปกติจะอัปเดตเมื่อมีการเรียกใช้การย้ายฐานข้อมูล schema.rb ยังสามารถสร้างไฟล์ได้เมื่อไม่มีการย้ายข้อมูลโดยเรียกใช้ rake db:schema:dump งาน. ข้อผิดพลาดทั่วไปเกี่ยวกับ Rails คือการตรวจสอบการย้ายข้อมูลใหม่ไปยังแหล่งที่มาของคุณ แต่ไม่ได้รับการอัปเดต schema.rb ไฟล์.

เมื่อการย้ายข้อมูลหมดไปและใช้เวลาทำงานนานเกินไปหรือสร้างฐานข้อมูลไม่ถูกต้องอีกต่อไปนักพัฒนาไม่ควรกลัวที่จะล้างไดเรกทอรีการย้ายข้อมูลเก่าทิ้งสคีมาใหม่และดำเนินการต่อจากที่นั่น การตั้งค่าสภาพแวดล้อมการพัฒนาใหม่จะต้องมี rake db:schema:load แทนที่จะเป็น rake db:migrate ที่นักพัฒนาส่วนใหญ่ต้องพึ่งพา

jwt ปฏิเสธการพิสูจน์ตัวตนผู้ใช้ล้มเหลว

บางส่วนของเหล่านี้ มีการหารือประเด็นต่างๆ ในคู่มือ Rails ด้วย

ข้อผิดพลาดทั่วไป # 10: การตรวจสอบข้อมูลที่ละเอียดอ่อนในที่เก็บซอร์สโค้ด

เฟรมเวิร์ก Rails ทำให้ง่ายต่อการสร้างแอปพลิเคชันที่ปลอดภัยไม่สามารถโจมตีได้หลายประเภท บางส่วนสามารถทำได้โดยใช้โทเค็นลับเพื่อรักษาความปลอดภัยเซสชันกับเบราว์เซอร์ แม้ว่าตอนนี้โทเค็นนี้จะถูกเก็บไว้ใน config/secrets.yml และไฟล์นั้นอ่านโทเค็นจากตัวแปรสภาพแวดล้อมสำหรับเซิร์ฟเวอร์ที่ใช้งานจริง Rails เวอร์ชันที่ผ่านมารวมโทเค็นไว้ใน config/initializers/secret_token.rb ไฟล์นี้มักจะถูกตรวจสอบโดยไม่ได้ตั้งใจในที่เก็บซอร์สโค้ดกับส่วนที่เหลือของแอปพลิเคชันของคุณและเมื่อสิ่งนี้เกิดขึ้น ทุกคนที่มีสิทธิ์เข้าถึงที่เก็บสามารถโจมตีผู้ใช้แอปพลิเคชันทั้งหมดของคุณได้อย่างง่ายดาย .

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

สรุปบทแนะนำ

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

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

ที่เกี่ยวข้อง: Ruby on Rails มีประโยชน์อย่างไร? หลังจากสองทศวรรษของการเขียนโปรแกรมฉันใช้ Rails

การจัดการผลิตภัณฑ์ได้รับพลังจาก Mindset ของผู้ประกอบการ

วงจรชีวิตของผลิตภัณฑ์

การจัดการผลิตภัณฑ์ได้รับพลังจาก Mindset ของผู้ประกอบการ
Bootstrapped: การสร้าง บริษัท ระยะไกล

Bootstrapped: การสร้าง บริษัท ระยะไกล

ไลฟ์สไตล์

โพสต์ยอดนิยม
ตลาด Crowdfunding Equity ของสหรัฐมีการเติบโตขึ้นตามความคาดหวังหรือไม่?
ตลาด Crowdfunding Equity ของสหรัฐมีการเติบโตขึ้นตามความคาดหวังหรือไม่?
คู่มือสำคัญสำหรับ Qmake
คู่มือสำคัญสำหรับ Qmake
หลักการออกแบบ Mobile UX
หลักการออกแบบ Mobile UX
MIDI Tutorial: การสร้างแอปพลิเคชั่นเสียงบนเบราว์เซอร์ที่ควบคุมโดยฮาร์ดแวร์ MIDI
MIDI Tutorial: การสร้างแอปพลิเคชั่นเสียงบนเบราว์เซอร์ที่ควบคุมโดยฮาร์ดแวร์ MIDI
Init.js: คำแนะนำเกี่ยวกับสาเหตุและวิธีการใช้ JavaScript แบบ Full-Stack
Init.js: คำแนะนำเกี่ยวกับสาเหตุและวิธีการใช้ JavaScript แบบ Full-Stack
 
Splash of EarlGrey - UI การทดสอบแอพ ApeeScape Talent
Splash of EarlGrey - UI การทดสอบแอพ ApeeScape Talent
จาก Node.js ไปจนถึงการจ่ายภาษีอิสระของคุณ: บทสัมภาษณ์กับ Developer ที่ประสบความสำเร็จ
จาก Node.js ไปจนถึงการจ่ายภาษีอิสระของคุณ: บทสัมภาษณ์กับ Developer ที่ประสบความสำเร็จ
ขายธุรกิจของคุณ? หยุดทิ้งเงินไว้บนโต๊ะ
ขายธุรกิจของคุณ? หยุดทิ้งเงินไว้บนโต๊ะ
บทช่วยสอนเกี่ยวกับส่วนขยายแอป iOS 8
บทช่วยสอนเกี่ยวกับส่วนขยายแอป iOS 8
ผู้จัดการการเติบโต
ผู้จัดการการเติบโต
โพสต์ยอดนิยม
  • วิธีการสร้างราสเบอร์รี่ pi 3
  • วงการความงามในตัวเรามีค่าแค่ไหน
  • สปริง boot rest ตัวอย่าง oauth2
  • อุตสาหกรรมเครื่องสำอางมีมูลค่าเท่าไหร่ในปี 2017
  • ac corp vs s corp คืออะไร
  • แปลงวันที่เป็นมิลลิวินาที javascript
  • วิธีแฮ็คข้อมูลบัตรเครดิตของใครบางคน
หมวดหมู่
  • การจัดการโครงการ
  • การเพิ่มขึ้นของระยะไกล
  • การบริหารโครงการ
  • เครื่องมือและบทช่วยสอน
  • © 2022 | สงวนลิขสิทธิ์

    portaldacalheta.pt