Maintenance mode
Adds support for maintenance mode to Kamal. There are two new commands: - `kamal app maintenance` - puts the app in maintenance mode - `kamal app live` - puts the app back in live mode In maintenance mode, the kamal proxy will respond to requests with a 503 status code. It will use an error page built into kamal proxy. You can use your own error page by setting `error_pages_path` in the configuration. This will copy any 4xx.html or 5xx.html files from that page to a volume mounted into the proxy container.
This commit is contained in:
@@ -44,7 +44,8 @@ class Kamal::Configuration::Proxy
|
||||
"forward-headers": proxy_config.dig("forward_headers"),
|
||||
"tls-redirect": proxy_config.dig("ssl_redirect"),
|
||||
"log-request-header": proxy_config.dig("logging", "request_headers") || DEFAULT_LOG_REQUEST_HEADERS,
|
||||
"log-response-header": proxy_config.dig("logging", "response_headers")
|
||||
"log-response-header": proxy_config.dig("logging", "response_headers"),
|
||||
"error-pages": error_pages
|
||||
}.compact
|
||||
end
|
||||
|
||||
@@ -52,6 +53,17 @@ class Kamal::Configuration::Proxy
|
||||
optionize ({ target: "#{target}:#{app_port}" }).merge(deploy_options), with: "="
|
||||
end
|
||||
|
||||
def stop_options(drain_timeout: nil, message: nil)
|
||||
{
|
||||
"drain-timeout": seconds_duration(drain_timeout),
|
||||
message: message
|
||||
}.compact
|
||||
end
|
||||
|
||||
def stop_command_args(**options)
|
||||
optionize stop_options(**options), with: "="
|
||||
end
|
||||
|
||||
def merge(other)
|
||||
self.class.new config: config, proxy_config: proxy_config.deep_merge(other.proxy_config)
|
||||
end
|
||||
@@ -60,4 +72,8 @@ class Kamal::Configuration::Proxy
|
||||
def seconds_duration(value)
|
||||
value ? "#{value}s" : nil
|
||||
end
|
||||
|
||||
def error_pages
|
||||
File.join config.proxy_error_pages_container_directory, config.version if config.error_pages_path
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user