# frozen_string_literal: true
namespace :load do
task :defaults do set( :database_url, "postgres://postgres@#{fetch(:slug)}-db/#{fetch(:application)}" ) end
end
namespace :docker do
namespace :db do desc 'Attempt to start the database container' task :start do on primary(:db) do network_list = [fetch(:docker_network, nil)].compact.flatten networks = network_list.map do |network| ['--network', network] end.compact.flatten.join(' ') execute 'docker', 'run', '-d', '--restart', 'always', '--name', "#{fetch(:slug)}-db", fetch(:docker_db_options, nil), networks, fetch(:database_image), '||', 'true' end end task :stop do on roles(:db), in: :parallel do %w[stop rm].each do |command| execute 'docker', command, "#{fetch(:slug)}-db", '||', 'true' end end end task :terminate do invoke 'docker:db:stop' invoke 'docker:db:clean' end task :clean do on roles(:db), in: :parallel do execute 'docker', 'rmi', fetch(:database_image), '||', 'true' end end task :setup do invoke 'docker:db:migrate' invoke 'docker:db:reset' end task :migrate do on roles(:app, select: :primary, migrate_on_deploy: true) do execute 'docker', 'exec', fetch(:slug), 'bin/rails', 'db:migrate', "RAILS_ENV=#{fetch(:stage)}" end end task :reset do on roles(:app, select: :primary, reset_on_deploy: true) do execute 'docker', 'exec', fetch(:slug), 'bin/rails', 'db:reset', "RAILS_ENV=#{fetch(:stage)}" end end end
end