กำลังจัดเก็บเนื้อหาของไซต์ที่สามารถแก้ไขได้?


9

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

  • เป็นสิ่งที่คนที่ไม่ใช่ด้านเทคนิคต้องการแก้ไข ตัวอย่างหนึ่งคือการเขียนคำโฆษณาสำหรับเว็บไซต์ - โปรแกรมเมอร์จัดทำแม่แบบพร้อมข้อความที่เป็นค่าเริ่มต้นเป็น "Lorem ipsum ... " และเนื้อหาจริงจะถูกแทรกในภายหลังไปยังฐานข้อมูล

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

โซลูชันที่อธิบายมีความยืดหยุ่น แต่มีสาเหตุบางอย่างที่ฉันไม่ชอบ

  • เพราะเนื้อหาจะต้องมีการอ่านข้อมูลจากฐานข้อมูลมีค่าใช้จ่ายในการปฏิบัติงาน

    เราลดขนาดลงโดยใช้รูปแบบแคช แต่สิ่งนี้ยังเพิ่มความซับซ้อนให้กับระบบ

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

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

ความคิดใดวิธีที่ดีที่สุดในการแก้ปัญหาเหล มีวิธีที่ดีกว่าสำหรับการจัดการเนื้อหาที่ฉันมองเห็นหรือไม่?


2
วิธีที่ดีที่สุดในการแก้ปัญหาเช่นนี้คือการหลีกเลี่ยง 'การวิเคราะห์อัมพาต' วิธีใดก็ตามที่คุณเลือกที่จะทำสิ่งนี้จะมีค่าใช้จ่ายอย่าเพิ่มมากขึ้นในการเดาตัวเองสองหรือสาม
Nocturno

เราพูดถึงวันรัฐเท่าไหร่? กี่ kbs, megs?
Amit Wadhwa

คำตอบ:


5

คุณควรคิดถึงเนื้อหาที่แก้ไขได้เป็นคุณสมบัติที่สมบูรณ์

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

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


0

นี่เป็นภารกิจที่ดีสำหรับ DevOps ของคุณ :) คุณสามารถทำสิ่งต่อไปนี้:

  1. วางทรัพยากรที่สามารถแก้ไขได้ในส่วนแยก / ที่เก็บ VCS (ฉันจะใช้คำศัพท์ Git ที่นี่)
  2. ใช้กระบวนการสร้างและการปรับใช้ของคุณเพื่อให้ทรัพยากรเหล่านี้จะถูกดึงจากที่เก็บนั้นไปยังที่ตั้งแยกต่างหากบนเซิร์ฟเวอร์ (คุณสามารถสร้างระเบียบบางอย่างสำหรับสภาพแวดล้อมที่แตกต่างกันดังนั้นคุณไม่จำเป็นต้องกำหนดค่าตำแหน่งที่ตั้งนี้แยกต่างหากสำหรับแต่ละคน)
  3. เมื่อผู้ใช้เปลี่ยนแปลงบางสิ่งบนเว็บไซต์การเปลี่ยนแปลงจะถูกบันทึกลงในไฟล์ทรัพยากร พุชไปที่รีโมตที่เก็บข้อมูลจะถูกดำเนินการแบบอะซิงโครนัสกับการเปลี่ยนแปลงแต่ละครั้ง
  4. ในการปรับใช้การเปลี่ยนแปลงนักพัฒนาจะปิดการใช้งานฟังก์ชั่นการแก้ไขและรวมการเปลี่ยนแปลงของเขาในที่เก็บระยะไกล จากนั้นในการผลิตเขาดึงไฟล์ที่รวมจาก repo ระยะไกล หลังจากนั้นฟังก์ชันการแก้ไขสามารถเปิดใช้งานได้อีกครั้ง

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


0

ความคิดใดวิธีที่ดีที่สุดในการแก้ปัญหาเหล

เรามีสถานการณ์เดียวกัน เราลงเอยด้วยการใช้แอพ Django ต่อไปนี้:

มันไม่สมบูรณ์แบบ แต่ให้ทุกสิ่งที่คุณต้องการ:

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

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

มีวิธีที่ดีกว่าสำหรับการจัดการเนื้อหาที่ฉันมองเห็นหรือไม่?

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.