Tool provides support of Elixir terms in system env variables. For security reasons only literals/terms are allowed in configs (no functions, macros, modules etc). I very recommend to combine this tool with BootEnv.
mix archive.install hex ex_env 0.3.2 --force
For every OTP application, default system variable name is <UPPER_CASE_OTP_APP>_CONFIG. Example:
export BEST_APP_CONFIG=" \
[ \
{ \
BestApp.Repo, \
[ \
adapter: Ecto.Adapters.Postgres, \
url: \"ecto://postgres:postgres@localhost/best_app\", \
pool_size: 10 \
] \
}, \
{ \
BestApp.Endpoint, \
[ \
http: [port: 4001], \
server: true \
] \
}, \
{ \
:workers_pool_size, \
100 \
} \
] \
"
use ExEnv # put this line to the bottom of file
iex> Application.get_env(:best_app, :workers_pool_size)
100
iex> Application.get_env(:best_app, BestApp.Repo)
[
adapter: Ecto.Adapters.Postgres,
url: "ecto://postgres:postgres@localhost/best_app",
pool_size: 10
]
By default use ExEnv expression allows to use system-variable based configs for:
If you need to configure other OTP application - you can use ExEnv.config macro manually in config.exs (or other config) file
use ExEnv
ExEnv.config(:other_app)
ExEnv.config(:other_app, "CUSTOM_ENV_VAR")