For me, there are two compelling points in this:<p><pre><code> 1) Environment variables are 'exported by default', making it easy to do silly things like sending database passwords to Airbrake. Sure we could introduce code to filter them out, but it's another thing we need to remember to update every time we add one - not robust in the face of code changes. Better not to put them there in the first place
</code></pre>
and<p><pre><code> 4) if you restart an app by sending it a signal (e.g. SIGHUP) from an unrelated shell that causes it to re-exec itself, it will still have the environment of the original process. So for example, you can't update config in environment variables and do a Unicorn "zero downtime" restart. This can cause confusion
</code></pre>
While the restart/reload problem can be circumvented using multiple instances, the leaking problem can't be easily solved in a generic way.<p>That's why I would suggest not to put secrets into environment variables. Systems like Kubernetes or Docker Swarm have great support for such kind of secrets. Is there someone who researched this concern in more depth?