Forum: Ruby on Rails a switchtower recipe to copy rather than checkout

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Jim M. (Guest)
on 2006-02-26 00:29
(Received via mailing list)
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
  run "cp #{release_path}/public/dot.htaccess.deploy

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

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
    # 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("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

    #puts "...cleanup"
    system("rm -rf #{temp_dest} code_update.tar.gz")
Curtis Spencer (Guest)
on 2006-02-26 12:01
(Received via mailing list)

Great stuff!  I never really liked the idea of having the production
machines have direct access to the source control.  Thanks for sharing.

This topic is locked and can not be replied to.