ความคิดแรกของฉันคือ:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
ทางออกที่ดีคือการใช้ rsync มันเปลี่ยนเฉพาะไฟล์ที่เปลี่ยนแปลงจริงๆ ระวังเครื่องหมายทับที่ท้ายเส้นทางนั้นสำคัญมาก
อาปาเชปกติไม่จำเป็นต้องรีสตาร์ทมันไม่ใช่โลกของจาวา มันจะตรวจสอบการเปลี่ยนแปลงของไฟล์ php ทุกไฟล์ที่มีการร้องขอและอ่าน (และโทเค็นซ้ำอีกครั้ง) เมื่อมีการเปลี่ยนแปลงโดยอัตโนมัติ
การดึง Git นั้นมีประสิทธิภาพคล้ายกันถึงแม้ว่ามันจะยากขึ้นเล็กน้อยในการเขียนสคริปต์ แน่นอนว่ามันช่วยให้สามารถตรวจจับการรวม / เปลี่ยนแปลงการตรวจจับได้อย่างหลากหลาย
วิธีการแก้ปัญหานี้จะทำงานอย่างราบรื่นหากไม่มีการเปลี่ยนแปลงที่สำคัญ - หากมีการเปลี่ยนแปลงครั้งใหญ่ในการปรับใช้อันตรายเล็กน้อยไม่สามารถปิดได้เพราะไม่มีช่วงเวลาที่ไม่สำคัญเมื่อรหัสจะถูกเปลี่ยนบางส่วน และโดยเฉพาะอย่างยิ่งไม่ได้
หากมีการเปลี่ยนแปลงใหญ่ข้อเสนอแนะของฉันคือโซลูชันเริ่มต้นของคุณ (เปลี่ยนชื่อสองครั้ง)
นี่คือฮาร์ดคอร์เล็กน้อย แต่วิธีแก้ปัญหาอะตอม 100%:
(1) ทำการติดตั้งระบบไฟล์บางส่วนของคุณโดยที่วีโอไอพีของคุณเกิดขึ้น:
mount /dev/sdXY /mnt/tmp
(2) --bind
ติดตั้ง public_html_new ไปที่ public_html ของคุณ:
mount --bind /path/to/public_html_new /path/to/public_html
จากจุดนี้ Apache จะเห็นการปรับใช้ใหม่ของคุณ การเปลี่ยนแปลงใด ๆ ของ 404 เป็นไปไม่ได้
(3) ทำการซิงโครไนซ์กับ rsync แต่บนจุดเมานต์สำรอง):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) ลบการผูกติด
umount /path/to/public_html