amnu3387
Distillery and compile time ENV variables not being used on restart
Hey, hope any one more experienced with Distillery can shed some light on this issue.
So I have read through quite a bit of disparate sources on how to access env variables when deploying through Distillery. What I ended up doing was to create a prod.secret.exs the deployment user folder. This works - I’ve used interpolated values with “${…}” on my ~/.profile I have:
export REPLACE_OS_VARS=true
On /.deliver/config I have the following hook pointing to the prod.secret.exs on the server.
pre_erlang_get_and_update_deps()
And I also uncommented the load profile line on the clean_compile hook.
pre_erlang_clean_compile() {
status "Running phoenix.digest" # log output prepended with '---->'
__sync_remote " # runs the commands on the build host
-f ~/.profile ] && source ~/.profile # load profile (optional)
source ~/.profile
...
}
This is for the compilation and is working as expected. Whenever I build and release, or upgrade and release the correct ENV variables are fetched from the ENV, and used in the interpolation in prod.secret.exs
But, whenever I restart through edeliver, or if I reboot the server, no longer are they used.
If I open~/app/var/sys.config the correct values appear on the erlang config.
If I go to a release where I restart the server and open sys.config (e.g. ~/app/releases/0.0.11/sys.config), those values are not interpolated, whereas if I check on a release that wasn’t rebooted they are.
What else am I missing about it in order to have them correctly populated on reboot? Or do I need a different setup altogether to have this working, like fetching from env and setting them on runtime? If so anyone knows a good place to check an example of how to hook that up before app start?
Thanks
Most Liked
wmnnd
I am personally not a big fan of prod.secret.exs because I find that it is generally better if a production system can be configured with environment variables following the Twelve-Factor App principles.
You could debug whether your .profile is run by simply logging the result of System.get_env/0 and verifying that all your required variables (including REPLACE_OS_VARS) are set.







