aboutsummaryrefslogtreecommitdiffstats
path: root/lib/capistrano
diff options
context:
space:
mode:
Diffstat (limited to 'lib/capistrano')
-rw-r--r--lib/capistrano/tasks/deploy_cold.rake42
1 files changed, 42 insertions, 0 deletions
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