Skip to content

task (vin-7729): defer kredis attributes via the active_model load hook - #1

Open
brenogazzola wants to merge 1 commit into
mainfrom
v1.8.0-on-load-active-model
Open

brenogazzola wants to merge 1 commit into
mainfrom
v1.8.0-on-load-active-model

Conversation

@brenogazzola

Copy link
Copy Markdown
Member

Card VIN-7729 · usado por FestaLab/festalab-app#9636

Este PR existe para documentar a branch. O festalab-app fixa o commit 0edf22b2 dela no Gemfile, então nada precisa ser mergeado para o app funcionar.

Por quê

O kredis 1.8.0, último release, inclui Kredis::Attributes em ActiveModel::Model dentro de um config.after_initialize. Referenciar ActiveModel::Model ali carrega o Active Model antes de o app terminar de inicializar.

O Rails edge passou a vigiar isso com o guard de load hooks (rails/rails#56201). Em todo boot sem eager load, ele loga um warning com backtrace. No festalab-app o guard está em :raise nos testes, então com o kredis do rubygems todo boot de teste local quebraria com LoadError.

O rails/kredis não tem fix nem issue sobre isso, e não recebe commit de código desde o 1.8.0.

O que muda

Um commit em lib/kredis/railtie.rb: o after_initialize vira ActiveSupport.on_load(:active_model), o hook que rails/rails#48698 criou para isso. O Active Model roda esse hook quando ActiveModel::Model carrega, então o include acontece no mesmo momento, sem forçar o carregamento antes da hora. De quebra, classes carregadas por eager load também ganham as macros (rails#60).

A branch parte da tag v1.8.0 do upstream. O main do upstream só tem commits de CI e Dependabot depois dela, então o código é exatamente o do gem 1.8.0 mais este commit.

Cuidados

  • Não apagar, rebasear nem dar force-push nesta branch enquanto o festalab-app fixar 0edf22b2. O Bundler busca o commit direto no GitHub, e um commit que nenhuma branch alcança pode ser coletado.
  • Se for mergear, use merge commit. Squash e rebase criam outro SHA, e o commit fixado some quando a branch for apagada.
  • Quando remover: quando um release do rails/kredis trouxer o mesmo on_load. Aí o festalab-app volta para o gem do rubygems e esta branch pode ser apagada. O passo a passo está em docs/env_development/dependency_updates.md, no festalab-app.
  • Nenhum PR foi aberto no rails/kredis, por decisão.

O main deste fork foi sincronizado com o rails/kredis:main (fast-forward, sem commits próprios) para este PR mostrar só a mudança.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NzgBdAKvgt4tYapPqqMKbR

…load hook

kredis 1.8.0 includes Kredis::Attributes into ActiveModel::Model from config.after_initialize, which loads ActiveModel::Model before the app is initialized and trips Rails' early-load guard (rails/rails#56201). Rails 7.1 added the :active_model load hook for exactly this (rails/rails#48698); it also gives eager-loaded ActiveModel::Model classes the attributes (rails#60).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzgBdAKvgt4tYapPqqMKbR
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