Repository navigation
Conversation
Replaces 207 lines of generic filler (a Pre-Migration Checklist of snippets annotated 'should be fine') with a 114-line runbook the reader can execute top to bottom: fiber-safety greps, the config diff, what actually breaks, the isolation level, a canary with an explicit rollback trigger, and when to stay on Puma. H2 and slug unchanged - #migration-from-pumaunicorn is a live ranking anchor.
Four fabrications removed, each verified against primary sources: 'async: true' is not a database.yml key; the 'load :rack' DSL is superseded by the service/Falcon::Environment::Rack shape in 0.57; 'no explicit timeout needed as fibers are cooperative' was unsupported; and the cross-link claimed a C extension forced the sibling post's rollback when that post documents a MiniMagick shell-out.
Centerpiece correction: Thread#[] is FIBER-local ('Each fiber has its own bucket for Thread#[] storage'), while thread_variable_set is thread-local. The standard advice to 'move thread-local state to fiber-local' is backwards for the API people actually reach for, so the leak hides in the one that sounds safe.
Reviewer verdicts. Copy editor: MAJOR - 'two edits make the runbook fail if a reader executes it top to bottom'; all cuts and the Gemfile/rollback ambiguity fix applied. Cold-eyes 9-check: NOT PUBLISH-READY on two copy-paste-and-it-fails blockers - 'bundle exec falcon.rb' does not resolve from the app root, and File.basename(__dir__) names the service 'config' when the file sits under config/. Both fixed by moving falcon.rb to the application root per the deployment guide, where falcon host reads it and takes no path argument.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
🛑 Independent codex cross-check: 2 blockers + 2 majors. Converting to draft. All findings verified by execution against falcon-0.57.0, Ruby 4.0.6, async 2.44.1, activerecord 8.1.3.1 — not by reading. First, the three riskiest claims all HOLD — ship them:
BLOCKER 1 — "hit 3 blocks the whole worker" is false for all four things its grep finds. Falcon runs BLOCKER 2 — MAJOR 1 — the MAJOR 2 — the config drops Also: systemd count is 8 (env override), not 4; a quote has its subject substituted inside quotation marks; the Rails guide now recommends the Repro scripts in the session scratchpad. |
|
Superseded by #501, which is this same rewrite plus the four defects the independent execution-based pass found in it (the two blockers and two majors listed in the comment above). Closing rather than pushing onto this branch because its worktree belongs to an agent that is currently offline; #501 branches from this exact commit (5756415), so nothing is lost. |
Rewrites the
## Migration from Puma/Unicornsection of the site's #2 organic page in place. URL, slug, H2 and the#migration-from-pumaunicornanchor are unchanged - a separate Puma→Falcon post would have split a ranking cluster (20.09 §12a).207 lines → 114. The old section opened with "requires understanding the differences and planning the transition carefully", and its "Pre-Migration Checklist" was Ruby snippets annotated "should be fine" / "OK in Falcon". It never said what breaks or how to roll back.
Four fabrications removed, each verified against primary sources
async: truein database.ymlload :rack/rack hostname doDSLservice+Falcon::Environment::RackThe centerpiece correction
Thread#[]/Thread.current[:foo]is fiber-local - "Each fiber has its own bucket for Thread#[] storage." It isthread_variable_setthat is thread-local. The standard advice to "move thread-local state to fiber-local" is backwards for the API people actually reach for, so the leak hides in the one that sounds safe:thread_variable_setfor per-request state → fibers share one thread → cross-request data leakThread.current[:cache]as a memo → rebuilt per request → silent cache-miss regressionAlso corrected: there is no Falcon equivalent of Puma's
threads min, max.countsets worker processes; nothing bounds fibers per worker, so the ceiling lives in your DB pool.Reviewer verdicts
Copy editor - MAJOR: "two edits make the runbook fail if a reader executes it top to bottom". All cuts applied, plus the Gemfile/rollback ambiguity fix.
Cold-eyes 9-check - NOT PUBLISH-READY → fixed:
bundle exec falcon.rbdoes not resolve from the app root, and contradicted the two launch commands already on the pageFile.basename(__dir__)names the service"config"when the file sits underconfig/Both resolved by moving
falcon.rbto the application root per the deployment guide, wherefalcon hostreads it and takes no path argument.falcon serveis documented as "not designed for deployment".Gates
bin/hugo-buildgreen (1171 pages), post-rebase onto the theme rebuild (e1fa540)Merge order
Expects #493 to land first. That PR fixes the Rails Integration block (
:fiber_pool,allow_concurrency) which this branch deliberately does not touch. Rebased onto current master so it can merge either way, but #493 first keeps the page internally consistent.Known defects outside this window (not mine to fix)
async_query_executor = :fiber_pool- invalid value (owned by P0: recover #2 organic page from a 404 (Falcon alias) + R9 verdict #493)after_connect:in database.yml - not a real key, same fabrication classload :rack+ old shebang with the modernservice/Falcon::Environment::RackDSL in one blockfalcon --config ... servecommands elsewhere on the page pair with the legacy DSL🤖 Generated with Claude Code