Adds the basics of a GOV.UK application:
- Unicorn as a web server
- Error reporting with Sentry
- Statsd client for reporting stats
- Rails logging
- Content Security Policy generation for frontend apps
Add this line to your application's Gemfile:
gem "govuk_app_config"
And then execute:
$ bundle
Find or create a config/unicorn.rb
in the app
At the start of the file insert:
require "govuk_app_config/govuk_unicorn"
GovukUnicorn.configure(self)
To serve an app with unicorn run:
$ bundle exec unicorn -c config/unicorn.rb
If you include govuk_app_config
in your Gemfile
, Rails' autoloading mechanism will make sure that your application is configured to send errors to Sentry.
Your app will have to have the following environment variables set:
SENTRY_DSN
- the Data Source Name (DSN) for SentrySENTRY_CURRENT_ENV
- production, staging or integrationGOVUK_STATSD_PREFIX
- a Statsd prefix likegovuk.apps.application-name.hostname
Report something to Sentry manually:
GovukError.notify("Something went terribly wrong")
GovukError.notify(ArgumentError.new("Or some exception object"))
Extra parameters are:
GovukError.notify(
"Oops",
extra: { offending_content_id: "123" }, # Additional context for this event. Must be a hash. Children can be any native JSON type.
level: "debug", # debug, info, warning, error, fatal
tags: { key: "value" } # Tags to index with this event. Must be a mapping of strings.
)
You can exclude certain errors from being reported using this:
GovukError.configure do |config|
config.excluded_exceptions << "RetryableError"
end
GovukError.configure
has the same options as the Sentry client, Raven. See the Raven docs for all configuration options.
Use GovukStatsd
to send stats to graphite. It has the same interface as the Ruby Statsd client.
Examples:
GovukStatsd.increment "garets"
GovukStatsd.timing "glork", 320
GovukStatsd.gauge "bork", 100
# Use {#time} to time the execution of a block
GovukStatsd.time("account.activate") { @account.activate! }
This Gem provides a common "health check" framework for apps. See the health check docs for more information on how to use it.
In Rails applications, the application will be configured to send JSON-formatted
logs to STDOUT
and unstructed logs to STDERR
.
For frontend apps, configuration can be added to generate and serve a
content security policy header. The policy is report only when the
environment variable GOVUK_CSP_REPORT_ONLY
is set, and enforced otherwise.
To enable this feature, create a file at config/initializers/csp.rb
in the
app with the following content:
GovukContentSecurityPolicy.configure