lib/tasks/maintenance.rake
require 'turnout'
namespace :maintenance do
desc 'Enable the maintenance mode page ("reason", "allowed_paths", "allowed_ips" and "response_code" can be passed as environment variables)'
rule /\Amaintenance:(.*:|)start\Z/ do |task|
invoke_environment
maint_file = maintenance_file_for(task)
maint_file.import_env_vars(ENV)
maint_file.write
puts "Created #{maint_file.path}"
puts "Run `rake #{task.name.gsub(/\:start/, ':end')}` to stop maintenance mode"
end
desc 'Disable the maintenance mode page'
rule /\Amaintenance:(.*:|)end\Z/ do |task|
invoke_environment
maint_file = maintenance_file_for(task)
if maint_file.delete
puts "Deleted #{maint_file.path}"
else
fail 'Could not find a maintenance file to delete'
end
end
def invoke_environment
if Rake::Task.task_defined? 'environment'
Rake::Task['environment'].invoke
end
end
def maintenance_file_for(task)
path_name = (task.name.split(':') - ['maintenance', 'start', 'end']).join(':')
maint_file = if path_name == ''
Turnout::MaintenanceFile.default
else
Turnout::MaintenanceFile.named(path_name)
end
fail %{Unknown path name: "#{path_name}"} if maint_file.nil?
maint_file
end
end