There’s one project I work on where the client wants to be able to edit HTML files in the root folder, but I want to be able to deploy with capistrano. It’s a pain to have to log into the server and check whether those files have changed before each deployment so last night, I added the following to my deploy.rb:
desc "Make sure we don't overwrite manual static file changes"
task :before_deploy do
captured = false
run "svn status #{deploy_to}/current/public" do |ch, stream, data|
if stream == :out and data.chomp.match(/^M/)
captured = true
end
end
if captured
run "svn commit #{deploy_to}/current/public -m 'Storing manual changes to static HTML before deploy'"
end
end
It’s not the most elegant, but it’ll make sure that any files the client has changed (which were already in the repository) are committed, and it makes the deployment process just that little bit easier.
(thanks to Jonathan Weiss for a recent blog entry that reminded me to implement this.)