Skip to content

Example migration check: primary-only, never walk every pool - #8

Merged
rameerez merged 1 commit into
mainfrom
fix/migration-check-example
Aug 16, 2026
Merged

Example migration check: primary-only, never walk every pool#8
rameerez merged 1 commit into
mainfrom
fix/migration-check-example

Conversation

@rameerez

Copy link
Copy Markdown
Owner

Found live on licenseseat's /healthcheck within minutes of adding business checks: the example's check_all_pending! walks every configured pool (queue/cache/cable), blocks on checkout under load, and times out a healthy page — 122ms idle vs >10s under traffic, measured in prod. Replacement is primary-only migration_context.needs_migration? (~7ms, read-only), which is also the question the check actually asks. Examples + README.

ActiveRecord::Migration.check_all_pending! iterates EVERY configured
connection pool. In a Solid-Queue/Cache/Cable app the cache pool is hot on
every request, so under load the check blocks on pool checkout and a
healthy page drifts into check-timeout territory. Measured in production:
122ms idle, >10s under traffic — a false ❌ from the example everyone
copies.

The replacement checks the primary pool's migration context, read-only,
~7ms, and asks the question the tripwire actually means: did a deploy land
with pending schema migrations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rameerez
rameerez merged commit b71d1cb into main Aug 16, 2026
@rameerez
rameerez deleted the fix/migration-check-example branch August 16, 2026 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant