web-dev-qa-db-ja.com

Apache / PHPはシンボリックリンクを60秒間キャッシュしているようです-それを停止する方法、または実際にシンボリックリンクをキャッシュしているものを見つけて停止する方法は?

Capistranoを使用してCentOS5.5を実行しているLAMPサーバーにデプロイしているPHP Webアプリケーションがあります。Capistranoはシンボリックリンクを使用して最新バージョンへの切り替え(およびロールバック)を管理するため、ドキュメントルートはそのシンボリックリンクを指します。

残念ながら、PHPアプリケーションへのWebリクエストは、シンボリックリンクが更新されてからちょうど60秒間、ドキュメントルートのシンボリックリンクの前のターゲットを指していることがわかりました。

PHP構成で、これに関連している可能性があるとわかった唯一の設定は、realpath_cache_ttl設定、ただしこれは120秒に設定されています。 Apacheの構成には何も見つかりませんでした。

APCは使用していません。

私も正しい場所を探していますか?

7
Shabbyrobe

シンボリックリンクはApacheによってキャッシュされます。httpd.confでFollowSymLinksを使用していると思います。 lstatへの呼び出しがキャッシュされていないSymLinksIfOwnerMatchを使用してみることができます http://httpd.Apache.org/docs/2.0/misc/perf-tuning.html#symlinks

11
Ochoto

Apacheはシンボリックリンクをキャッシュしませんが、ファイルの場所を少しキャッシュします。APCを使用すると、実際にキャッシュが実行されます。私もこれを見ましたが、デプロイにはファブリックを使用しました。回避策は、変更後のシンボリックリンクの後、Apacheの再起動/リロード/グレースフルを実行することでした。

最初にグレースフルを試してから、リロードしてから、他のすべてが失敗した場合は再起動してください

1
Mike

Apacheはシンボリックリンクをキャッシュしません(試してみるのは信じられないほど愚かです。ファイルシステムキャッシュは何が起こっているかについてより多くを知っており、非常に高速に近いでしょう)。何がいつ何をしているのかをよりよく理解するために、シバン全体をstraceしたいと思います。

0
womble