I am trying to reload the config (after programmatically changing the environment) via
Mix.Task.run("loadconfig")
which works fine via iex -S mix but fails after prod release:
$ env MIX_ENV=prod mix release
$ _build/prod/rel/pubsub_elixir/bin/pubsub_elixir start
[...]
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function Mix.Task.run/1 is undefined (module Mix.Task is not available)
Mix.Task.run("loadconfig")
[...]
Similar when I call Mix.Tasks.Loadconfig.run([]) directly.
Hey @fergusg welcome! Given that changes to the environment can change an enormous amount about how the application runs (like how it connects to a database, etc) config changes are basically re-deploys. You would normally go about whatever the normal redeploy behavior is to ensure minimal downtime.
The background context is that I am trying to deploy as a Docker image in AWS/ECS and loading the env via the AWS Secrets Manager at runtime (so I can use the same image for prod/test/stage etc)
There are alternatives though, I think… I will investigate
In my case using neither Phoenix nor Ecto, just plain Elixir. I think a solution is to explicitly pass in the envs as docker arguments (or the AWS/ECS equivalent) rather than trying to load at runtime inside the app.