私の最初のアイデアは:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
良い解決策は、rsyncを使用することでした。実際に変更されたファイルのみが変更されました。注意してください、パスの最後のスラッシュはここで重要です。
通常、Apacheは再起動を必要としません。Javaの世界ではありません。要求に応じてすべてのphpファイルの変更をチェックし、変更時に自動的に再読み取り(および再トークン化)します。
Git pullも同様に効率的でしたが、スクリプトを作成するのは少し難しくなりました。もちろん、さまざまなマージ/変更検出の可能性の広いスペクトルを可能にしました。
このソリューションは、実際に大きな変更がない場合にのみシームレスに実行されます-展開に大きな変更がある場合、コードが部分的に変更される無視できない時間間隔があるため、少しのハザードを閉じることができませんそして、一部はそうではありません。
大きな変更がある場合、私の提案は最初の解決策でした(2つの名前変更)。
ここに少し筋金入りですが、100%アトミックソリューションがあります:
(1)magentoが行われる場所で、ファイルシステムの一部を代替マウントします。
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