On 19/11/2024 23:14, Rowan Tommins [IMSoP] wrote:
> On 19/11/2024 13:48, Hammed Ajao wrote:
>>
>> So if symfony and laravel do this, whose best practices are we going
>> by exactly, yours?
>
>
> One common citation for this is "The Twelve-Factor App"
> [https://12factor.net/], a methodology/manifesto published in 2011 by
> some engineers from Heroku as a way to build a particular sort of
> cloud-native service-based application. Coincidentally, an open-source
> project to update and expand on it was officially announced last week:
> https://12factor.net/blog/open-source-announcement
>
> The idea is that "in a twelve-factor app":
>
> - configuration comes directly from the environment; for instance,
> provided by the orchestration layer in a container-based deployment
> - it is not written to a file, but passed directly to the application
> as environment variables
> - it does not indicate a named environment, but configures the
> application directly
>
>
> When people struggled with development environments which didn't have
> a suitable place for these variables to come from, the ".env file" was
> invented - a way to emulate the environment variables that a "real"
> deployment would receive.
>
> This then took on a life of its own, and eventually ".env" became just
> another format for configuration files: instead of "development.ini"
> and "production.ini", you have ".env.development" and
> ".env.production". We came full circle, and the only thing which
> actually comes from the environment is a master switch to choose the
> file to load.
>
>
> Personally, I don't think there's anything wrong with the "master
> switch" approach for a lot of applications. Not everybody works for a
> company with hundreds of developers, and a dozen kubernetes clusters
> running A/B tests on continuously deployed code. Sometimes you really
> do know you have 2, or 3, or 4, environments to configure.
>
> However, I don't think the master switch is something that should be
> hard-coded in a server. Maybe you know that if it's running under "php
> -S", it's "dev mode", and it it's running under Apache, it's "live
> mode"; if so, you can look at PHP_SAPI / php_sapi_name(). But maybe
> you do run Apache on a dev server; or you have separate debug and QA
> modes.
>
You wrote the perfect post summarising a brief history of configuration
injection and brought it back to the main point that the master switch
does not belong in the web server, and I hadn't heard about the 12factor
open source announcement so I learned something new, too! Bravo. Thanks
for posting this and agree with everything stated herein.
Cheers,
Bilge