Excluding files from being deployed with Capistrano while still under version control with Git

I want to start testing the JavaScript in my Rails apps with qUnit and I’m wondering how to keep the test JavaScript and test runner HTML page under version control (I’m using Git, of course) but keep them off the production server when I deploy the app with Capistrano. My first thought is to let Capistrano send all the code over as usual including the test files, and write a task to delete them at the end of the deployment process. This seems like sort of a hack, though. Is there a cleaner way to tell Capistrano to ignore certain parts of the repository when deploying?

  • Capistrano 2 -> 3 git deployment differences?
  • How do I execute a Capistrano task locally?
  • Git Bash cannot find git directory when git is installed
  • how to resolve ssh key rejection while deploying 1st Rails3 app?
  • Capistrano error when using git
  • cap deploy:cold fails with 'No such file or directory - git rev-parse master' error
  • Using Programmer's Notepad 2 as editor for git
  • What are the downsides to rebasing topic branches instead of merging?
  • “git reset --hard HEAD” in master branch deleted unstaged changes in local branch
  • From svn to git, with a moved trunk
  • What exactly does git's “rebase --preserve-merges” do (and why?)
  • How to reference the initial commit?
  • 3 Solutions collect form web for “Excluding files from being deployed with Capistrano while still under version control with Git”

    As of August 30th, 2013, you can simply create a .gitattributes file and export-ignore the files/folders of your choice.

    features/ export-ignore
    spec/     export-ignore
    

    Reference: https://github.com/capistrano/capistrano/pull/626

    There are many ways to accomplish this, you can keep your tests in a test branch of the app like VonC suggested, but that would mean that you would make all your changes in your main branch and then sync it to your test branch. (Not without its merits, but sometimes a pain)

    You can use the .gitignore file to your directory.

    Any file that you add to this will not be added to your repository. Since capistrano just pulls and posts from your repository, not having the files included will keep them off your production server.

    Last but not least, if you want the test files in your main repository for version control, you can add a recipe to your config/deploy.rb file.. something like:

    desc "Remove Test Files"  
        task :remove_test_files , :roles => :web do
          sudo %{rm -f #{current_path}/public/javascripts/testfile.js}
          sudo %{rm -f #{current_path}/public/javascripts/anothertestfile.js}
        end
    
    after 'deploy:remove_test_files'
    

    And specify the files you want to remove, this will remove any files you want when you deploy. 🙂

    Any of the above will work. Pick the method that works for you.

    You could have those tests in a test branch (on which you merge your main branch before any test)

    That way, when you ask Capistrano to deploy what is on your main branch, no test of any sort is ever included.

    Git Baby is a git and github fan, let's start git clone.