アップロードを処理するための古典的な解決策は、実際のディレクトリをメインの Web スペースから移動し、新しいバージョンをチェックアウトするためだけに残して (以下のスクリプトで行っているように)、Apache を使用して「エイリアス」に戻すことです。ウェブサイトの一部として配置します。
Alias /uploads /home/user/uploads/
ただし、サーバーを十分に制御できない場合は、選択肢が少なくなります。
特定のスクリプトを開発/ライブ サイトにデプロイするために使用するスクリプトがあります (両方とも同じサーバーで実行されます)。
#!/bin/sh
REV=2410
REVDIR=$REV.20090602-1027
REPOSITORY=svn+ssh://topbit@svn.example.com/var/svn/website.com/trunk
IMAGES=$REVDIR/php/i
STATIC1=$REVDIR/anothersite.co.uk
svn export --revision $REV $REPOSITORY $REVDIR
mkdir -p $REVDIR/tmp/templates_c
chown -R username: $REVDIR
chmod -R 777 $REVDIR/tmp $REVDIR/php/cache/
chown -R nobody: $REVDIR/tmp $REVDIR/php/cache/ $IMAGES
dos2unix $REVDIR/bin/*sh $REVDIR/bin/*php
chmod 755 $REVDIR/bin/*sh $REVDIR/bin/*php
# chmod -x all the non-directories in images
find $IMAGES -type f -perm -a+x | xargs -r chmod --quiet -x
find $STATIC1 -type f -perm -a+x | xargs -r chmod --quiet -x
ls -l $IMAGES/* | grep -- "-x"
rm dev && ln -s $REVDIR dev
リビジョン番号と、チェックアウトしたディレクトリ名に使用される日付/時刻を入れます。中央の chmod は、専用のイメージ サーバーにもシンボリック リンクされているため、イメージのパーミッションが問題ないようにします。
最後に、古いシンボリック リンク .../website/dev/ が新しくチェックアウトされたディレクトリに再リンクされます。Apache 構成には、.../website/dev/htdocs/ の doc-root があります。
一致する .../website/live/htdocs/ docroot もあり、「live」は別のシンボリック リンクです。これは、ライブ シンボリック リンクを削除し、dev が指すものに置き換える私の他のスクリプトです。
#!/bin/sh
# remove live, and copy the dir pointed to by dev, to be the live symlink
rm live && cp -d dev live
私はサイトの新しいバージョンを数日ごとにプッシュしているだけなので、これを 1 日に数回使用したくないかもしれません (私の APC キャッシュは、サイトのいくつかのバージョン以上を好まないでしょう)、しかし私にとっては、これは私自身の展開では非常に問題がないことがわかりました。