stevensonmt
Vapor validate Config Providers prior to loading
I want my app to search for configuration options at runtime with the following ascending precedence:
- default config file “./config/config.toml”
- system config file “/etc/my_app/config.toml”
- env variables
["$MY_APP_CONFIG_KEY1", "$MY_APP_CONFIG_KEY2", ...] - user local config file “/home/$USER/.config/my_app/config.toml”
Based on the Precedence documentation in the Vapor docs:
Precedence
Vapor merges the configuration based on the order that the providers are specified.providers = [ %Dotenv{}, %File{path: "$HOME/.vapor/config.json", bindings: []}, %Env{bindings: []}, ]Env will have the highest precedence, followed by File, and finally Dotenv.
This seemed relatively straightforward, but the problem I have is that each provider specified must be valid. So if the user, for instance uses a TOML config but does not set the ENV variables specified in the bindings list the app will crash with a Vapor.LoadError. Would I need to validate the possible sources separately before adding them to the providers list that is passed to Vapor?
Most Liked
dimitarvp
Haven’t worked with Vapor for like a year now so can’t exactly help you there but I’ve had a similar problem where I wanted to first check for an env var, then a local config file (in the current directory) and then a config file in $HOME. I just ended up writing my own small config provider that wrapped Vapor. Sadly I don’t have the code to share since that work was for a contract and not a personal project. But it was relatively easy to do.
Also, I might have stolen some code from the Rust config crate and translated it to Elixir in the process. ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









