Use Rack::Lint to check the response is valid. Existing code really just needed Content-Length & Content-Type headers.
This allows all existing requests to finish, but does not keep the same socket alive across the exec, so this is not a graceful as it could be.
Puma::App::Status is a rack app that can be used to control the current server. It allows a server to be queried remotely programmaticly.