V2.0: Environments


Hanami supports different environments based on a HANAMI_ENV environment variable.

Setting HANAMI_ENV allows your code to act differently, depending on the environment.

If HANAMI_ENV is not set, Hanami will fallback to checking RACK_ENV. If neither variable is set, the environment defaults to :development.

By convention, Hanami expects HANAMI_ENV to be either development, test, or production.

Environment helpers

Use the following helpers if your code needs behave differently in different environments.

Hanami.env

Hanami.env returns a symbol representing the current environment.

# HANAMI_ENV=development

Hanami.env
=> :development
# HANAMI_ENV=test

Hanami.env
=> :test
# HANAMI_ENV=production

Hanami.env
=> :production

Hanami.env?

Hanami.env?(*names) returns true if the given name(s) match the current environment.

# HANAMI_ENV=development

Hanami.env?(:development)
=> true

Hanami.env?(:test)
=> false

Hanami.env?(:production)
=> false

You can match on more than one environment:

# HANAMI_ENV=development

Hanami.env?(:development, :test)
=> true
# HANAMI_ENV=test

Hanami.env?(:development, :test)
=> true
# HANAMI_ENV=production

Hanami.env?(:development, :test)
=> false

Environment specific app config

Config options that are environment specific can be set on the app class. For example:

# config/app.rb

module Bookshelf
  class App < Hanami::App
    environment(:production) do
      # Production specific config or initialization
      config.middleware.use ProductionOnlyMiddleware
    end
  end
end

See the app config guide for information on supported config options.

Production deployments

When deploying your application to production, set the HANAMI_ENV environment variable to production.

In production, Hanami logs to standard out by default, using a structured JSON format with a log level of :info rather than :debug, which is used in development and test. See the logger guide for more detail.