From 2cb29eb625786458c89ab32829fbfb6215b6f89c Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Tue, 26 Dec 2017 19:46:56 +0100 Subject: Capistrano task for cold deploys. 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. --- lib/capistrano/tasks/deploy_cold.rake | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib/capistrano/tasks/deploy_cold.rake diff --git a/lib/capistrano/tasks/deploy_cold.rake b/lib/capistrano/tasks/deploy_cold.rake new file mode 100644 index 0000000..f91ede6 --- /dev/null +++ b/lib/capistrano/tasks/deploy_cold.rake @@ -0,0 +1,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 -- cgit v1.2.3