$ the-wire · showcase
Active Storage upgrades to Marcel 2 with canonical MIME types
By RepoJournal · Filed · About Rails
Active Storage's content type detection moves to Marcel 2, returning canonical MIME types for newly analyzed blobs.
Active Storage now depends on Marcel ~> 2.0, which returns canonical types where 1.x returned aliases (audio/x-aac becomes audio/aac, text/x-yaml becomes application/yaml) for newly analyzed or uploaded blobs [1]. Existing blobs keep their stored content types, and lookups by old aliases still resolve. This is a breaking change if your code relies on the old alias names. Mission Control Jobs now routes host app route helpers through main_app when they're used inside the engine, fixing ActionController::UrlGenerationError from before_actions like Rails 8's new_session_path redirect [2]. It also inherits default_url_options from the base controller class, useful for preassigning placeholders in root_url [3]. Lemans 1.1.0 adds OPENROUTER_PROVIDER_ORDER recognition [4] and miniswen gains a --no-reasoning flag [5], plus prints reasoning when Claude Opus returns tool calls without content [6].
Action items
- → Review Active Storage code that depends on MIME type aliases before deploying with Marcel 2 rails/rails [plan]
- → Test Mission Control Jobs with host app route helpers and default_url_options after the routing changes rails/mission_control-jobs [plan]
- → Update lemans to 1.1.0 for OPENROUTER_PROVIDER_ORDER support rails/lemans [plan]
References
- [1] Upgrade to Marcel 2 for Active Storage content type detection (#58549) ↗ rails/rails
- [2] Route host app helpers used inside the engine through main_app ↗ rails/mission_control-jobs
- [3] use default_url_options from base_controller_class ↗ rails/mission_control-jobs
- [4] + recognize OPENROUTER_PROVIDER_ORDER ↗ rails/lemans
- [5] + miniswen: --no-reasoning ↗ rails/lemans
- [6] - miniswen: print reasoning if content is empty ↗ rails/lemans