aboutsummaryrefslogtreecommitdiffstats
path: root/lib/capistrano/tasks/deploy_cold.rake
blob: f91ede636b9a15a1bed5fcf73fb2efd20612107e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Capistrano task for cold deploys
#
# Taken from: https://stackoverflow.com/a/28001351/270280
# Licensed under cc by-sa 3.0
#
# Generalized and fixed running with the correct environment
# by Harald Eilertsen
#
namespace :deploy do

  #
  # Run this for first time deploy (after setting up the database.) It
  # loads the checked in schema instead of running through all the
  # migrations to rebuild the database schema.
  #
  # The task will be skipped if the database schema already exists, and
  # let the migrations run as normally.
  #

  desc "deploy app for the first time (expects pre-created but empty DB)"
  task :cold do
    before 'deploy:migrate', 'deploy:initdb'
    invoke 'deploy'
  end

  desc "initialize a brand-new database (db:schema:load, db:seed)"
  task :initdb => [ :set_rails_env ] do
    on primary :db do |host|
      within release_path do
        if test(:psql, %Q{#{fetch(:pg_database)} -U #{fetch(:pg_user)} -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';"|grep schema_migrations})
          puts '*** THE PRODUCTION DATABASE IS ALREADY INITIALIZED, YOU IDIOT! ***'
        else
          with rails_env: fetch(:rails_env) do
            execute :rake, 'db:schema:load'
            execute :rake, 'db:seed'
          end
        end
      end
    end
  end

end