III. CONFIGURATION Store config in the environment. $transport
=
Swift_SmtpTransport::newInstance(
getenv('EMAIL_HOST'),
getenv('EMAIL_PORT')?:25 )
-‐>setUsername(getenv('EMAIL_USERNAME'))
-‐>setPassword(getenv('EMAIL_PASSWORD')) ; Assumption: same code but different configuration per deployment target
V. BUILD, RELEASE, RUN A build step vendors dependencies, prepares assets, etc. A release step creates a package from build and config. A runtime step executes, without special knowledge.
V. BUILD, RELEASE, RUN A build step vendors dependencies, prepares assets, etc. A release step creates a package from build and config. A runtime step executes, without special knowledge.
X. DEV/PROD PARITY Keep dev, stage and prod envs as similar as possible. SQLite ≠ MySQL Apache ≠ Nginx File based sessions ≠ Redis based sessions If apt-‐get or brew don't get the job done: Vagrant is always your friend!
XI. LOGGING Treat your logs as a stream of events. Stop rotating logs and so forth in your app. Let the runtime worry about it. Log to STDOUT/STDERR. Centrally archive it.