TomlConfigProvider
A dead-simple config provider module that plugs into Elixir 1.9 release config and parses TOML config files on startup. It is meant as a replacement for Toml.Provider, which only works with Distillery.
Installation
Add toml_config_provider
to your application's mix.exs
and run mix deps.get
as usual:
def deps do
[
# ... other dependencies
{:toml_config_provider, "~> 0.1.0"}
]
end
Configuration
Create your runtime config files as you would with toml-elixir.
Put it somewhere outside of your build directory (think: /etc/myapp/config.toml
):
[myapp."Myapp.Repo"]
username = "super_secret_user"
password = "super_secret_password"
database = "myapp_prod"
hostname = "localhost"
ssl = true
pool_size = 15
[myapp."MyappWeb.Endpoint"]
# Generate a secret_key_base using `mix phx.gen.secret`
secret_key_base = "foobar2000"
# As there is no way to differentate keyword lists and maps in TOML,
# key-value pairs nested two levels deep are interpreted as maps
[myapp.deeply_nested.structure]
foo = "bar"
bar = "baz"
Add your file as a "config provider" inside your release config in mix.exs
:
def project do
[
app: :myapp,
version: "0.1.0",
elixir: "~> 1.8",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
default_release: :prod,
releases: releases()
]
end
defp releases do
[
prod: [
include_executables_for: [:unix],
config_providers: [
{TomlConfigProvider, "/etc/myapp/config.toml"}
]
]
]
end
In your release, you should now have access to your configuration:
iex(prod@hostname)1> Application.get_env(:myapp, Myapp.Repo)
[
database: "myapp_prod",
hostname: "localhost",
password: "super_secret_password",
pool_size: 15,
ssl: true,
username: "super_secret_user"
]
These docs can be found at https://hexdocs.pm/toml_config_provider.