<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deployment on Brian Faust</title><link>https://vacua.dev/tags/deployment/</link><description>Recent content in Deployment on Brian Faust</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://vacua.dev/tags/deployment/rss.xml" rel="self" type="application/rss+xml"/><item><title>Rollback Cannot Restore a Contract You Already Removed</title><link>https://vacua.dev/rollback-cannot-restore-a-contract-you-already-removed/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://vacua.dev/rollback-cannot-restore-a-contract-you-already-removed/</guid><description>&lt;p&gt;Release A stores a catalogue quote in &lt;code&gt;amount_cents&lt;/code&gt;. Release B renames the
column to &lt;code&gt;amount_minor&lt;/code&gt; and deploys successfully. Every new B process is
healthy.&lt;/p&gt;
&lt;p&gt;One A process is still serving traffic during the rolling update. Its next
query asks PostgreSQL for &lt;code&gt;amount_cents&lt;/code&gt; and fails because the column no longer
exists. Restoring the A image produces the same error. The old code returned;
the contract it needs did not.&lt;/p&gt;
&lt;p&gt;The same failure can survive in less visible places. An A queue worker can
receive a B-only payload after the web rollout. An A process can read a B-only
cache value after the application image is restored. Neither queued bytes nor
cached bytes change because a deployment controller selected an older image.&lt;/p&gt;</description></item><item><title>Cache the Deployment, Not the Assumption</title><link>https://vacua.dev/cache-the-deployment-not-the-assumption/</link><pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate><guid>https://vacua.dev/cache-the-deployment-not-the-assumption/</guid><description>&lt;p&gt;Release B serves &lt;code&gt;/inventory&lt;/code&gt; and labels its catalogue &lt;code&gt;green&lt;/code&gt;. The code is
correct. The environment is correct. Yet the application answers &lt;code&gt;/catalogue&lt;/code&gt;
with &lt;code&gt;blue&lt;/code&gt;, while &lt;code&gt;/inventory&lt;/code&gt; returns &lt;code&gt;404&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nothing corrupted Laravel&amp;rsquo;s generated files. They contain release A&amp;rsquo;s
configuration and route table because release A created them. The deployment
combined those files with release B and produced a system which is consistently
wrong.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;config:cache&lt;/code&gt; and &lt;code&gt;route:cache&lt;/code&gt; are often introduced as performance switches.
That description misses their more important property: each command turns a
set of inputs into a generated artifact. If the artifact is deployed, it must
carry the same release identity as the code and environment which produced it.&lt;/p&gt;</description></item></channel></rss>