私がやろうとしていること:
.NETベースのWebサイトにファイルを起動したい。dllが変更されるたびに、WindowsはWebアプリをリサイクルします。アプリを介してファイルをrsyncすると、優先される1回ではなく、遅延のために数回リサイクルできます。これにより、サイトは長期間使用できなくなります。
私がそれを解決しようとした方法:
--delay-updatesを使用してこれを修正しようとしました。これは、一時ファイルを変更する前に、すべてのファイル変更を一時ファイルにステージングすることになっています。これはまさに私が望んでいたことのように見えましたが、-delay-updates引数を指定すると、アドバタイズされたように動作しないように見えます。(-vvを使用して)出力に識別可能な違いはなく、最終的な動作は同じです(アプリは1回ではなく複数回リサイクルされます)。
安定性の理由から、すべての本番マシンでCygwinを実行したくありません。そうしないと、ローカルステージングディレクトリにrsyncしてから、「アトミック」になるのに十分な速度のローカルrsyncを実行できます。
私はrsync3.0.9でCygwin1.7.17を実行しています。
私はatomic-rsync(http://www.opensource.apple.com/source/rsync/rsync-40/rsync/support/atomic-rsync)に出くわしました。これは、ステージングディレクトリに同期し、既存のディレクトリの名前を変更することでこれを実現します。次に、ステージングディレクトリの名前を変更します。残念ながら、これはWindowsの設定では機能しません。これは、実行中のdllファイルを含むフォルダーの名前を変更できないためです(許可が拒否されました)。
バイナリが実行されているフォルダを削除することはできますが、これにより、dllが更新されたときだけでなく、毎回アプリがリサイクルされます。これはさらに悪いことです。
誰かがどちらかの方法を知っていますか
- --delay-updatesが実際に機能していることを確認します
- すべてのファイルをアトミックに(というより、非常に迅速に)更新するという私の目標を達成しますか?
助けてくれてありがとう。