PageSourceSearch

https://shakacode.com/component---src-template-doc-article-tsx-con…g-deploy-bundles-md-eff0a742d63ef4ef20c3.js

js shakacode.com collected 2026-10-04 00:27:24 UTC 8,495 bytes, 2 lines download raw bytes

1"use strict";(self.webpackChunkgatsby_starter_default=self.webpackChunkgatsby_starter_default||[]).push([[2417],{83263:function(e,t,n){n.r(t),n.d(t,{Head:function(){return g},default:function(){return m}});var a=n(28453),l=n(96540);function r(e){const t=Object.assign({h1:"h1",a:"a",span:"span",p:"p",strong:"strong",h2:"h2",ul:"ul",li:"li"},(0,a.R)(),e.components);return l.createElement(l.Fragment,null,l.createElement(t.h1,{id:"seed-rolling-deploy-bundles-at-release-time-not-only-at-build",style:{position:"relative"}},l.createElement(t.a,{href:"#seed-rolling-deploy-bundles-at-release-time-not-only-at-build","aria-label":"seed rolling deploy bundles at release time not only at build permalink",className:"anchor before"},l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"Seed rolling-deploy bundles at release time, not only at build"),"\n",l.createElement(t.p,null,l.createElement(t.strong,null,"Status:")," accepted"),"\n",l.createElement(t.p,null,"When the production image is produced by ",l.createElement(t.strong,null,"promoting a staging image")," (for\nexample, through a Control Plane ",l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">upstream:</code>'}})," configuration), a build-time\npre-seed cannot know production's live ",l.createElement(t.strong,null,"draining bundle"),": it runs in the\nstaging pipeline against a staging snapshot, and promotion happens later and is\nsometimes skipped. We\ntherefore run the ",l.createElement(t.strong,null,"Rails/Rake seed task"),"\n(",l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">bundle exec rake react_on_rails_pro:pre_seed_renderer_cache</code>'}}),") in a\nRuby-capable release, init, or startup step as the correctness path, and keep\nthe build-time seed as a fallback floor. A combined Ruby+Node image can run it\nbefore Node. A Node-only renderer needs that step to use the promoted app\nartifact/config. The step and renderer must mount the same writable shared volume at\n",l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">RENDERER_SERVER_BUNDLE_CACHE_PATH</code>'}}),", or copy/sync the completed cache into the\nrenderer before it starts; gate renderer start/readiness on completion. Without\na Ruby-capable step that makes the completed cache available to the renderer,\nthe Rake seed cannot run for it; use multi-source fallback plus 410 recovery or\na combined shape."),"\n",l.createElement(t.h2,{id:"considered-options",style:{position:"relative"}},l.createElement(t.a,{href:"#considered-options","aria-label":"considered options permalink",className:"anchor before"},l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"Considered options"),"\n",l.createElement(t.ul,null,"\n",l.createElement(t.li,null,l.createElement(t.strong,null,"Build-time seed only (status quo).")," Rejected: structurally wrong under the\npromotion model — the image holds staging's previous bundle, and even a\nmulti-source build-time seed (staging + production) goes stale across two\npending promotions."),"\n",l.createElement(t.li,null,l.createElement(t.strong,null,"Build a dedicated production image instead of promoting staging.")," Rejected:\nfights the promotion model (the point of promotion is shipping the exact\nartifact tested on staging) and still goes stale if a prod image is ever built\nahead of its release."),"\n",l.createElement(t.li,null,l.createElement(t.strong,null,"Boot seed only.")," Rejected in favor of belt-and-suspenders: a boot seed that\ncan't reach the live endpoint would fall all the way back to the per-request\n410 path. Keeping the build-time multi-source seed bounds that failure to a\nsmall, rare miss."),"\n"),"\n",l.createElement(t.h2,{id:"consequences",style:{position:"relative"}}
1,l.createElement(t.a,{href:"#consequences","aria-label":"consequences permalink",className:"anchor before"},l.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"Consequences"),"\n",l.createElement(t.ul,null,"\n",l.createElement(t.li,null,"Correctness of the boot seed ",l.createElement(t.strong,null,"depends on deploy ordering (R2)"),": its\nRuby-capable step must complete before renderer readiness and Rails cutover, so\nthe environment's live endpoint still advertises the draining hash. If Rails\ncuts over first, the boot seed would fetch the new hash and miss the draining\none."),"\n",l.createElement(t.li,null,"Renderer start/readiness gates on the boot seed ",l.createElement(t.strong,null,"completing, not succeeding"),"\n— a failed seed degrades to the 410 fallback rather than wedging the deploy."),"\n",l.createElement(t.li,null,"The build-time fallback seeds from both staging and production, so the image\nretains each environment's then-live bundle. That keeps staging's own rolling\ndeploys warm while still giving a promoted image a recent production bundle if\nthe boot seed cannot reach the live endpoint."),"\n"))}var o=function(e){void 0===e&&(e={});const{wrapper:t}=Object.assign({},(0,a.R)(),e.components);return t?l.createElement(t,e,l.createElement(r,e)):r(e)},i=n(63679),s=n(95197),c=n(47388),d=n(23690),h=n(14487);const u=i.default.p.withConfig({displayName:"doc-article__RedirectFallback",componentId:"sc-tic2w5-0"})(["padding:2rem;"]),p=e=>{let{data:t,location:n,children:a}=e;const{headings:r}=t.article.childMdx,o=(0,s.X9)(n.pathname),[i,d]=l.useState(null),p=n.pathname.split("/"),m=p.indexOf("docs"),g=-1===m?n.pathname.length:p.slice(0,m+1).join("/").length,f=n.pathname.slice(0,g),b=n.pathname.slice(g+1).replace(/\/$/,"").split("/").filter((e=>""!==e)),E=b.length>1?b.slice(0,-1).join("/"):"";l.useEffect((()=>{if(!o)return;const{hash:e}=window.location;d(e);const t=""+o+e;window.location.href!==t&&window.location.replace(t)}),[o]);const v=null===o||null===i?null:""+o+i;return l.createElement(l.Fragment,null,null!==v?l.createElement(u,{role:"status","aria-live":"polite"},"Redirecting..."," ",l.createElement("a",{href:v,target:"_blank",rel:"noopener noreferrer"},"Click here if not redirected.")):l.createElement(c.A,{main:l.createElement(h.A,{body:a,headings:r,transformUrl:e=>{if(e.startsWith("http")||e.startsWith("#"))return e;const t=e.replace(/\.md$/,"/");if(t.startsWith("./"))return f+(""===E?"":"/"+E)+t.slice(1);if(t.startsWith("../")){if(""===E)return""+f+t.slice(2);const e=E.split("/").slice(0,-1).join("/");return f+(""===e?"":"/"+e)+t.slice(2)}return f+"/"+(""===E?"":E+"/")+t}})}))};function m(e){return l.createElement(p,e,l.createElement(o,e))}const g=e=>{let{data:t,location:n,pageContext:a}=e;const{headings:r}=t.article.childMdx,{siteUrl:o}=t.site.siteMetadata,{repoDisplayName:i}=a,c=r.find((e=>1===e.depth)),h=(0,s.X9)(n.pathname)||""+o.replace(/\/+$/,"")+n.pathname;return l.createElement(d.A,{title:c?c.value:i,description:c?c.value:i+" documentation",isArticle:!0,canonical:h,pathname:n.pathname})}}}]);
2//# sourceMappingURL=component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-pro-react-on-rails-pro-docs-adr-0001-boot-seed-rolling-deploy-bundles-md-eff0a742d63ef4ef20c3.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.