# 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