I’m using the mix config provider with distillery
set(
overlays: [
{:copy, "rel/etc/myapp.service", "etc/myapp.service"},
{:copy, "rel/etc/config.exs", "etc/config.exs"}
]
)
set(
config_providers: [
{Mix.Releases.Config.Providers.Elixir, ["${RELEASE_ROOT_DIR}/etc/config.exs"]}
]
)
and in it I’m reading some env vars from the system like this
use Mix.Config
env! = fn var, type ->
val = System.get_env(var) || raise("need #{var} set")
try do
case type do
:string -> val
:integer -> String.to_integer(val)
end
rescue
_error ->
raise(ArgumentError, "couldn't parse #{val} as #{type}")
end
end
config :myapp,
db_path: env!.("DB_PATH", :string)
config :web, Web.Endpoint,
http: [:inet6, port: env!.("WEB_PORT", :integer)],
secret_key_base: env!.("WEB_SECRET_KEY_BASE", :string)
This makes bin/myapp remote_console
fail, since none of the env vars (DB_PATH, WEB_PORT, WEB_SECRET_KEY_BASE) are provided (DB_PATH="" WEB_PORT=0 WEB_SECRET_KEY_BASE="" bin/myapp remote_console
works). Is there a way around this?
That is, is there a way to only run the config for start
, console
, foreground
, and not for remote_console
?
One way would be to create a custom command my_remote_console
which would execute DB_PATH="" WEB_PORT=0 WEB_SECRET_KEY_BASE="" bin/myapp remote_console
.