Capistranoのdeploy:cleanupで過去のデプロイ履歴を削除できるのですが、環境(Linux)によってはうまくいかない場合があります。
SUDOを使用して、例えばroot権限などでファイルを削除しようとするのですが、
「1 incorrect password attempt」というメッセージが出たり、何度もパスワードを聞かれたりしてうまくいきません。
どうも、パスワードの最後に改行コードが無くて、どこまでがパスワードなのかOS側が認識できていないようです。
仕方ないので、deploy.rb内でcleanupタスクをオーバーライドして対応しました。
namespace :deploy do
task :cleanup, :except => {:no_release => true} do
count = fetch(:keep_releases, 5).to_i
run "ls -1dt #{releases_path}/* | tail -n +#{count + 1} | #{sudo :as => 'root'} xargs rm -rf"
end
end
やっていることは、通常のcleanupとなんら変わらないのですが、runで実行すると、うまく動きます。