[Rails] a switchtower recipe to copy rather than checkout
Jim Morris
morris at wolfman.com
Sat Feb 25 22:29:31 GMT 2006
For those who want use switchtower to deploy to a remote server that does not have
access to the main subversion repository, here is a task I just hacked up to use
switchtower to deploy to my servers by copying a local directory to the servers, rather
than have the servers use svn checkout.
I actually create my local directory using an svn export, but you can do whatever you
like here, and just deploy a local copy of your development directory tree if you like.
You can also exclude whatever directories or files you want using tar's
--exclude FILE option.
I include my after_update_code as this seems something most people need to do.
This could be done a lot better but it works :)
desc "fix up database and .htaccess"
task :after_update_code do
run "cp #{release_path}/config/database.yml.templ #{release_path}/config/database.yml"
run "cp #{release_path}/public/dot.htaccess.deploy #{release_path}/public/.htaccess"
end
desc <<DESC
Update all servers with the latest release of the source code.
This is a modified version that copies a local copy to the remote site
DESC
task :update_code, :roles => [:app, :db, :web] do
on_rollback { delete release_path, :recursive => true }
#puts "doing my update_code"
temp_dest= "tmp_code"
#puts "...get a local copy of the code into #{temp_dest} from local svn"
# but this could also just be your local development folder
system("svn export -q #{configuration.repository} #{temp_dest}")
#puts "...tar the folder"
# you could exclude files here that you don't want on your production server
system("tar -C #{temp_dest} -c -z -f code_update.tar.gz .")
#puts "...Sending tar file to remote server"
put(File.read("code_update.tar.gz"), "code_update.tar.gz")
#puts "...detar code on server"
run <<-CMD
mkdir -p #{release_path} &&
tar -C #{release_path} -x -z -f code_update.tar.gz &&
rm -rf code_update.tar.gz &&
rm -rf #{release_path}/log #{release_path}/public/system &&
ln -nfs #{shared_path}/log #{release_path}/log &&
ln -nfs #{shared_path}/system #{release_path}/public/system
CMD
#puts "...cleanup"
system("rm -rf #{temp_dest} code_update.tar.gz")
end
More information about the Rails
mailing list