title: Capistrano deploy:migrate and db:migrate run all migrations every time
body: <p>So, I'm diddling around with rails (ruby 1.9.3p392, rails 3.2, sqlite3 db) and I'm trying to deploy the ubiquitous blog tutorial code to a "production" server (apache, passenger, ubuntu).  My deploy.rb looks like this:</p>
  
  <pre><code>require 'bundler/capistrano'
  require 'rvm/capistrano'
  load 'deploy/assets'
  set :rvm_ruby_string,  ENV['GEM_HOME'].gsub(/.*\//,"")
  set :rvm_type, :user
  set :user, 'blah'
  set :application, 'railsTest'
  set :domain, 'www.blah.com'
  set :applicationdir, "/home/sean/public/blah.com/public"
  set :scm, 'git'
  set :repository,  "ssh://blah@1.1.1.1/home/blah/public/bla.com/public/capDep.git"
  #set :git_enable_submodules, 1 # if you have vendored rails
  set :branch, 'master'
  set :git_shallow_clone, 1
  set :scm_verbose, true
  set :use_sudo, false
  
  
  # roles (servers)
  role :web, domain
  role :app, domain
  role :db,  domain, :primary =&gt; true
  
  # deploy config
  set :deploy_to, applicationdir
  set :deploy_via, :export
  set :migrate_target, :latest
  # additional settings
  default_run_options[:pty] = true  # Forgo errors when deploying from windows
  #ssh_options[:keys] = %w(/home/blah/.ssh/id_rsa)
  ssh_options[:forward_agent] = true
  # if you want to clean up old releases on each deploy uncomment this:
  
  # If you are using Passenger mod_rails uncomment this:
  namespace :deploy do
    task :start do ; end
    task :stop do ; end
    task :restart, :roles =&gt; :app, :except =&gt; { :no_release =&gt; true } do
      run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
    end
  end
  
  #after "deploy:update_code", "deploy:migrate"
  </code></pre>
  
  <p>Now, I am sure that must look like a big hot mess to those who know what they are doing with capistrano, but I am an utter rube. In the end, despite my inadequacies, the deploy seems to work, because when I run the following</p>
  
  <pre><code>cap deploy:setup
  cap deploy
  </code></pre>
  
  <p>my app is up and running and, just because I can, I add a few rows to a table in the db via the web ui that was created for me by rails.  Now, I get bold and create a migration, adding a column to a table.  I push my changes to git.  To my horror, when I run </p>
  
  <pre><code>cap deploy
  </code></pre>
  
  <p>ALL the migrations are run, which recreates the tables, thus destroying all my data.  I have repeated this painful process several times.  My schema_migrations table looks like this:</p>
  
  <pre><code>20130620210004
  20130620220229
  20130628213331
  20130628214946
  20130628223002
  </code></pre>
  
  <p>What am I missing here? </p>
  
  <p><strong>UPDATE:</strong>  I recently gave @TheMahrvin's suggestion regarding running deploy:migrations at the command line and removing it from the deploy.rb.  It didn't work... once again, all migrations were run. My muse must have whispered something in my ear, because I decided to try running db:migrate on the server itself.  I was astonished to see this output after running just "rake":</p>
  
  <pre><code>  20130717230110 CreateHighScores
    20130717230342 CreateGames
    20130717231041 AddGameTypeToGame
    20130717233707 AddGamePublisherToGame
    20130717234124 AddGameRatingToGame
    20130731210558 AddGameMechanicToGame
  </code></pre>
  
  <p>Only the last migrations should be pending.  So, perhaps this isn't a problem with Capistrano at all (I've updated the title of this question to reflect that).  So, why are the previous migrations still being flagged as pending?  I know they were run in the past, both because I saw them in the output and verified the db schema after they ran.</p>
  
  <p><strong>UPDATE #2:</strong>  Setup another migration and ssh'd into the server and cd'd my way to the "current" directory, which if I understand capistrano at all (fat chance) is where the current files are.  Running</p>
  
  <pre><code>bundle exec rake db:migrate:status
  </code></pre>
  
  <p>got me:</p>
  
  <pre><code> Status   Migration ID    Migration Name
  --------------------------------------------------
    down    20130717230110  Create high scores
    down    20130717230342  Create games
    down    20130717231041  Add game type to game
    down    20130717233707  Add game publisher to game
    down    20130717234124  Add game rating to game
    down    20130731210558  Add game mechanic to game
    down    20130731212454  Add publish year to game
    down    20130731214515  Add game rank to game
    down    20130731214928  Add game abbr to game
    down    20130731215749  Add crazy field to game
  </code></pre>
  
  <p>I can't help feeling that there is something profoundly wrong with what I am trying to do.</p>