views:

346

answers:

2

I'm uploading files to my public/files folder of a Rails application on a constant basis through a web interface.

I don't want to keep these in source control since they go for almost 2 GBs, so every time I do a cap deploy it will save those files away in releases/ and replace the directory with the pristine copy stored in the repository.

I'm wondering what's the best way to keep those files in the server, in the current directory. Some of my ideas are:

  • Remove the directory from source control and replace it with a link to an external directory that's not managed by Capistrano.
  • Create a Capistrano task to copy the directory to /tmp before deploying and then copying it back to /public after it's done deploying.

Is there standard way to do this?

+5  A: 

You could make files a symlink to another directory on your machine, for examples the /shared directory at the same level as /current and /releases.

Check out capistrano manages the /log and /tmp directories.

jonnii
+3  A: 

For the future record, this is the task I used to do it with a shared directory:

task :link_shared_directories do     
  run "ln -s #{shared_path}/files #{release_path}/public/files"   
end    

after "deploy:update_code", :link_shared_directories
Federico Builes