Inicializador de trilhos que executa * depois que as rotas são carregadas?

Eu quero definir um atributo de classe quando meu aplicativo Rails for iniciado. Ele exige a inspeção de algumas rotas, portanto, as rotas precisam ser carregadas antes da execução do meu código personalizado. Estou com problemas para encontrar um local confiável para me conectar.

Isso funciona PERFEITAMENTE no ambiente de "teste":

config.after_initialize do
  Rails.logger.info "#{Rails.application.routes.routes.map(&:path)}"
end

Mut nãorabalho no ambiente de "desenvolvimento" (as rotas estão vazia

Por enquanto, parece que tenho coisas funcionando no modo de desenvolvimento executando o mesmo código emconfig.to_prepare que eu entendo acontece antes de cada solicitação. Infelizmente usandoto_prepare sozinho não parece funcionar no modo de teste, daí a duplicaçã

Estou curioso para saber por que as rotas são carregadas antes do after_initialize no modo de teste, mas não no modo de desenvolvimento. E realmente, qual é o melhor gancho para isso? Existe um único gancho que funcione para todos os ambientes?

*EDITAR

sugestão de @ mu de recarregar as rotas foi ótima. Isso me deu acesso consistente às rotas dentro de after_initialize em todos os ambientes. No entanto, para o meu caso de uso, acho que ainda preciso executar o código de to_prepare, pois estou definindo um atributo de classe em um modelo e os modelos são recarregados antes de cada solicitaçã

Então aqui está o que eu acabei fazendo.

[:after_initialize, :to_prepare].each do |hook|
  config.send(hook) do
    User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
  end 
end 

Parece um pouco confuso para mim. Eu acho que prefiro fazer algo como:

config.after_initialize do
  User.exclude_routes_from_usernames!
end

config.to_prepare do
  User.exclude_routes_from_usernames!
end

Mut eu não tenho certeza seUser é o lugar certo para examinarRails.application.routes. Acho que eu poderia fazer a mesma coisa com o código na lib / mas não tenho certeza se isso também está cert

utra opção é aplicar a sugestão de mu em to_prepare. Isso funciona, mas parece haver um atraso perceptível ao recarregar as rotas em todas as solicitações no meu ambiente de desenvolvimento, por isso não tenho certeza se essa é uma boa ligação, embora seja, pelo menos, SEC

config.to_prepare do
  Rails.application.reload_routes!
  User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
end

questionAnswers(2)

yourAnswerToTheQuestion