edo1z blog

プログラミングなどに関するブログです

Capitstranoでデプロイする度に、ユーザが登録している画像が消えると困る件

当然困ります。

http://www.slideshare.net/T2J/capistrano-tips-tips このページの22ページに解決策が書いてあります。これがよさげ。

(ちなみに、僕は今時点よりちょっと古いCapistranoを使っております。3ではありません。)

cakePHPでapp/webroot内に画像フォルダを作っている場合、(app/webroot/uploadsなど)まず最新リリースのuploadsフォルダを、shared/system/uploadsにコピーします。 そして、今後はデプロイする度に、app/webroot/uploadsを、shared/system/uploadsフォルダのシンボリックリンクにする。 という感じにしたらいいらしい。

でも今全然正しくシンボリックリンクの設定ができてなかったのにdeployしても画像が共有されているのはなぜだろうか??? 謎すぎる。

シンボリックリンクをcapistranoで作成するには、下記のような感じにした。

run "rm -rf #{latest_release}/app/webroot/uploads"
run "ln -nfs #{shared_path}/system/uploads #{latest_release}/app/webroot"

uploadsフォルダを削除してからじゃないとエラーになるので、最初に削除してから新たにシンボリックリンクを作成した。ln -nfsとあるが、nオプションは不要かも。というかfオプションも不要か削除してるし。