นักพัฒนา / บรรณาธิการหลายคนทำงานในไซต์ที่กำลังดำเนินการอยู่


28

พื้นหลัง

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

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

คำถามของฉันคือ:

มีวิธีที่ง่ายในการรวมฐานข้อมูลอัตโนมัติเพื่อให้หลายคนสามารถทำงานกับการติดตั้ง WordPress หรือไม่? แน่นอนว่าฉันสามารถส่งออกตารางที่ฉันรู้ว่ามีการเปลี่ยนแปลงในเครื่องท้องถิ่นของฉันและผลักดันพวกเขาไปยังเซิร์ฟเวอร์การแสดงละคร แต่เป็นไปได้ว่ามีบางสิ่งในเซิร์ฟเวอร์การแสดงละครที่ฉันต้องการจะลง ฉันสามารถดึงเอาท์พุท SQL ของทั้งสองฐานข้อมูลและทำให้พวกมันแตกต่างกัน ... แต่มันดูน่าเบื่อและแฮ็ค ฉันสงสัยว่านี่เป็นปัญหาที่คนอื่นแก้ไขหรือไม่; หากมีวิธีที่ชุมชนยอมรับเพื่อจัดการสิ่งนี้

ขอบคุณ!


การลงคะแนนเพื่อปิดหรือย้ายไปยังเว็บไซต์อื่น (ม.ค. : ความคิดใด ๆ เกี่ยวกับสิ่งที่ดีหรือไม่อาจเป็น superuser) นี่ไม่ใช่ WordPress ที่เฉพาะเจาะจงเนื่องจากคุณพบปัญหาเดียวกันกับ Drupal, Joomla หรือไซต์ที่ขับเคลื่อนด้วย PHP + MySQL สำหรับเรื่องนั้น
John P Bloch

ที่ได้รับการกล่าวว่าข้อเสนอแนะของฉันคือการที่คุณใช้เซิร์ฟเวอร์การแสดงละครระยะไกลแทนการท้องถิ่น
John P Bloch

@ John P Bloch: ด้วย Drupal บางสิ่งเช่น Drush จะช่วยได้มากในสถานการณ์นี้ ฉันคุ้นเคยกับ Django เป็นการส่วนตัวที่ปัญหาเหล่านี้ลดน้อยลงจากการแข่งขัน นอกจากนี้ฉันยังมีเซิร์ฟเวอร์การจัดเตรียมสองเครื่อง: หนึ่งเครื่องและหนึ่งรีโมต สิ่งที่ฉันทำคือทำงานกับเครื่องระยะไกลของฉัน แต่ต้องผลักมันไปยังเซิร์ฟเวอร์เพื่อให้คนอื่นเห็นได้ เซิร์ฟเวอร์สุดท้ายคือสิ่งที่จะตั้งค่าเมื่อเรามีทุกอย่างพร้อมกัน
Gavin Anderegg

2
@John P Bloch - ฉันคิดว่ามีเหตุผลว่าทำไมเรื่องนี้ถึงสมเหตุสมผลสำหรับคำถามที่ดีที่นี่ ฉันไม่มีเวลาตอบคำถาม แต่หวังว่าคนอื่นจะทำ
MikeSchinkel

1
@Gavin: ขออภัยฉันตีความคำถามของคุณผิด ใช่ฉันเชื่อว่าจะเขียนทับทุกอย่างบนเซิร์ฟเวอร์ที่ใช้งานจริง : /
แซค

คำตอบ:


16

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

ทุกอย่างใน Git

นี่คือสิ่งที่ฉันทำแม้ว่าฉันจะถามคำถาม แต่มันก็ดีที่จะเรียกประเด็นนี้ออกมา การใช้ Git ไม่เพียง แต่ช่วยให้เรามีประสิทธิผลมากขึ้นเท่านั้น แต่ยังช่วยลาร่วมของเราหลายต่อหลายครั้ง

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

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

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

ใช้ Git เพื่อปรับใช้

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

เนื่องจากเราใช้BitBucketเป็นโฮสต์ Git ของเราจึงมีงานพิเศษเล็กน้อยที่นี่ ก่อนอื่นเราใช้ไฟล์. ssh / configเพื่อให้เราสามารถพิมพ์สิ่งต่าง ๆ เช่นssh sitenameล็อกอินเข้าสู่เซิร์ฟเวอร์ของเรา (เรายังใช้รหัสผ่าน SSH ที่ไม่มีรหัสซึ่งทำให้สิ่งนี้ง่ายสุด ๆ ) นอกจากนี้เรายังให้แน่ใจว่าใช้วลีรหัสผ่าน sshเสมอ(Mac OS X ทำให้ง่ายมากโดยอนุญาตให้คุณเก็บข้อความรหัสผ่านของคุณใน Keychain.app ) สุดท้ายเราเพิ่มบรรทัด ForwardAgent ไปยังรายการ. ssh / config บนโฮสต์ที่เราต้องการดึงออกมา ซึ่งหมายความว่าเราต้องการคีย์สาธารณะ SSH ของแต่ละคนใน BitBucket เท่านั้นไม่ใช่กุญแจสาธารณะของแต่ละเซิร์ฟเวอร์ เราตรวจสอบให้แน่ใจว่าเก็บ.gitไดเรกทอรีหนึ่งไดเรกทอรีเหนือไดเรกทอรี HTML สาธารณะ

ฐานข้อมูลอัตโนมัติทิ้ง

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

ทุกคนมี wp-config ของตัวเอง

เนื่องจากเราทุกคนมีชื่อผู้ใช้และรหัสผ่านฐานข้อมูลท้องถิ่นของเราและเนื่องจากเราสามารถใช้ชื่อและกลไกการแสดงผลที่แตกต่างกันเราแต่ละคนเก็บไฟล์ wp-config ของเราเอง แต่ละรายการเหล่านี้จะถูกเก็บไว้ใน Git ด้วยชื่อที่ชอบwp-config-gavin.phpและเมื่อเราต้องการใช้การกำหนดค่านั้นเราจะเชื่อมโยงไปยังwp-config.php(ซึ่ง Git ใช้ละเว้น. gitignore )

นอกจากนี้ยังช่วยให้เราสามารถแทนที่siteurlตัวเลือกในwp_optionsตารางฐานข้อมูลเช่น:

define('WP_SITEURL', 'http://sitename.localhost');
define('WP_HOME', 'http://sitename.localhost');

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

หมายเหตุสุดท้ายเกี่ยวกับไฟล์ wp-config.php: ตรวจสอบให้แน่ใจว่าได้เก็บไว้เหนือไดเรกทอรี HTML สาธารณะและให้การอนุญาตสำหรับผู้ใช้เว็บเท่านั้น สิ่งนี้สร้างความแตกต่างอย่างมากในการรักษาความปลอดภัย WordPress

ปัญหาฐานข้อมูล

ในที่สุดเนื้อของเรื่อง

สิ่งที่ฉันต้องยอมรับคือเมื่อใช้ WordPress ไม่มีวิธีที่ดีในการเปลี่ยนแปลงฐานข้อมูล "ผสาน" แต่เราจำเป็นต้องพัฒนากฎความประพฤติเพื่อแก้ปัญหานี้ กฎค่อนข้างง่ายและให้บริการเราดีจนถึงตอนนี้

ในระหว่างการพัฒนามีบุคคลเพียงคนเดียวที่ "เป็นเจ้าของ" ไซต์ บุคคลนั้นมักจะทำการติดตั้ง (รับแพคเกจโฮสติ้งด้วยกันเริ่มโครงการ Basecamp, แบ่งการออกแบบ, สิ่งนั้น) เมื่อบุคคลนั้นถึงจุดที่เหมาะสมแล้วให้ทำการถ่ายโอนฐานข้อมูลสำหรับ WordPress ติดตั้งและใส่ลงใน Git จากจุดนั้นไปข้างหน้าทุกคนที่ทำการพัฒนาใช้การถ่ายโอนข้อมูลฐานข้อมูลนั้นและเจ้าของเป็นเพียงคนเดียวที่ทำการเปลี่ยนแปลงฐานข้อมูล

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

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


1

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


  • ขั้นตอน 1. Mysqldump ฐานข้อมูลการพัฒนาของคุณ
  • ขั้นตอนที่ 2 แทนที่อินสแตนซ์ทั้งหมดของ development.domain.com เป็น production.domain.com ^^
  • ขั้นตอนที่ 3 เข้าสู่ระบบ MySQL เรียกใช้คำสั่ง SOURCE เพื่อนำเข้าข้อมูลเช่น source /path/to/file

^^ วิธีแทนที่โดเมนเก่าทั้งหมดด้วยใหม่: (1) คัดลอกสคริปต์ด้านล่าง (2) chmod +xมัน (3) เรียกใช้

การใช้งาน: ./script.sh development-dump.sql > production-dump.sql

#!/bin/sed -f
s/'\([^\\']*\)development.domain.com\([^\\']*\)'/'\1production.domain.com\2'/g

2
ใช้ความระมัดระวัง: sed ไม่สามารถจัดการกับข้อมูลที่เข้ารหัสในการถ่ายโอนข้อมูล mysql ที่ได้รับการทำให้เป็นอนุกรมก่อนหน้านี้
hakre

จริง ๆ แล้วคำถามที่คุณตอบก่อนหน้านี้เป็นของฉัน :) ฉันรู้สึกเหมือนฉันกำลังถามคำถามอื่นที่นี่ เป็นเรื่องดีที่จะทิ้ง DB ทั้งหมดเมื่อมันเป็นเพียงฉันกำลังทำอยู่ แต่ถ้าฉันทำอย่างนั้นในสถานการณ์ที่อธิบายไว้ข้างต้นฉันจะเขียนทับการเปลี่ยนแปลงของคนอื่นหรือเขียนทับการเปลี่ยนแปลงของฉันเอง ฉันกำลังมองหาที่จะรวมการเปลี่ยนแปลงที่เป็นมากกว่าหนึ่งคนทำงานบนอินสแตนซ์ของ WordPress
Gavin Anderegg

1

ฉันกำลังทดลองกับโซลูชันที่แตกต่างกันสำหรับปัญหาเดียวกันนี้ในตอนนี้ แน่นอนว่ามันเป็นเรื่องยาก

โซลูชันปัจจุบันของฉันคือการถ่ายโอนข้อมูล mysql ในพื้นที่โดยใช้แฟล็ก --skip-extended-insert ฉันเชื่อว่าการตั้งค่าสถานะนี้ทำให้คำสั่งแทรกบันทึกที่จะสร้างขึ้นสำหรับทุกแถวของฐานข้อมูลทำให้การถ่ายโอนข้อมูลที่เป็นมิตรมากขึ้นผสาน ฉันหยิบเคล็ดลับว่าจากบทความนี้: http://www.viget.com/extend/backup-your-database-in-git/

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

มีการรวมปัญหาดังนั้นเราจึงพยายามที่จะใช้วิธี "ผลัด" กับสิ่งที่จะทำให้เกิดการเปลี่ยนแปลงฐานข้อมูล ก่อนที่ฉันจะทำอะไรใน Wordpress ที่จะเปลี่ยนฐานข้อมูลฉันตรวจสอบให้แน่ใจว่าเขาตรวจสอบข้อมูลล่าสุดของเขาแล้วดึงมันและนำเข้าแล้วก็ขอให้เขาอย่าทำการเปลี่ยนแปลงฐานข้อมูลจนกว่าฉันจะทำและตรวจสอบกับฉัน เห็นได้ชัดว่าไม่เหมาะและฉันกำลังมองหาทางออกที่ดีกว่า แต่เป็นการเริ่มต้น นอกจากนี้ยังช่วยให้เราควบคุม DB เวอร์ชันที่ดี

ฉันอาจสิ้นสุดการตั้งค่าฐานข้อมูล dev ที่ใช้ร่วมกันบนเซิร์ฟเวอร์และลองเชื่อมต่อสำเนาภายในเครื่องของเรากับฐานข้อมูลเดียวกันผ่าน SSH tunneling อย่างไรก็ตามวิธีการนี้จะประสบปัญหาเมื่อใดก็ตามที่เราหนึ่งคนติดตั้งปลั๊กอิน โดยทั่วไปไฟล์ PHP และฐานข้อมูล MySQL จะไม่ซิงค์กัน

ฉันกระตือรือร้นที่จะได้ยินว่าคนอื่นจัดการกับปัญหานี้อย่างไร

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