diff --git a/.gitignore b/.gitignore index a6f2826c3..7761dba2a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ /config/database.yml /config/secrets.yml /config/deploy-secrets.yml +/config/maintenance.yml /coverage diff --git a/config/deploy.rb b/config/deploy.rb index 5c98d3ade..e16b977e0 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -1,5 +1,5 @@ # config valid only for current version of Capistrano -lock '3.8.1' +lock '3.8.2' def deploysecret(key) @deploy_secrets_yml ||= YAML.load_file('config/deploy-secrets.yml')[fetch(:stage).to_s] diff --git a/config/maintenance.yml.example b/config/maintenance.yml.example new file mode 100644 index 000000000..540bc8bb7 --- /dev/null +++ b/config/maintenance.yml.example @@ -0,0 +1,12 @@ +--- +app_root: '.' +allowed_ips: + - 127.0.0.1 + - x.x.x.x + +allowed_paths: + - your/custom/route + +reason: 'Website down for maintenance' +response_code: 503 +retry_after: 3600 diff --git a/lib/capistrano/tasks/maintenance.cap b/lib/capistrano/tasks/maintenance.cap new file mode 100644 index 000000000..a7e3ca41e --- /dev/null +++ b/lib/capistrano/tasks/maintenance.cap @@ -0,0 +1,15 @@ +namespace :maintenance do + desc "Start maintenance mode (edit config/maintenance.yml to provide parameters)" + task :start do + on roles(:app) do + upload! "config/maintenance.yml", "#{current_path}/tmp/maintenance.yml" + end + end + + desc "Stop maintenance mode" + task :stop do + on roles(:app) do + execute "rm #{current_path}/tmp/maintenance.yml" + end + end +end