Rails инициализатор, который запускается * после * загрузки маршрутов?

Я хочу установить атрибут класса при запуске моего приложения Rails. Требуется проверка некоторых маршрутов, поэтому маршруты должны быть загружены до запуска моего пользовательского кода. У меня проблемы с поиском надежного места, чтобы зацепиться.

Это работает ОТЛИЧНО в «тестовой» среде:

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

Но этоне работа в среде разработки (маршруты пусты)

На данный момент у меня, кажется, есть вещи, работающие в режиме разработки, запустив тот же код вconfig.to_prepare что я понимаю, происходит перед каждым запросом. К сожалению используяto_prepare Кажется, что один не работает в тестовом режиме, следовательно, дублирование.

Мне любопытно, почему маршруты загружаются перед after_initialize в тестовом режиме, но не в режиме разработки. И действительно, что является лучшим крючком для этого? Есть ли один хук, который будет работать для всех сред?

*РЕДАКТИРОВАТЬ*

Предложение мю о перегрузке маршрутов было отличным. Это дало мне постоянный доступ к маршрутам в after_initialize во всех средах. Тем не менее, для моего случая использования, я думаю, мне все еще нужно запускать код из to_prepare, так как я устанавливаю атрибут класса для модели, и модели перезагружаются перед каждым запросом.

Итак, вот что я в итоге сделал.

[: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 

Это кажется мне немного грязным. Я думаю, что лучше сделать что-то вроде:

config.after_initialize do
  User.exclude_routes_from_usernames!
end

config.to_prepare do
  User.exclude_routes_from_usernames!
end

Но я не уверен, еслиUser это правильное место для изученияRails.application.routes, Я думаю, я мог бы сделать то же самое с кодом в lib /, но я не уверен, что это тоже правильно.

Другой вариант - просто применить предложение mu к to_prepare. Это работает, но, кажется, есть заметная задержка перезагрузки маршрутов при каждом запросе в моей среде разработки, поэтому я не уверен, что это хороший вызов, хотя, по крайней мере, это СУХОЙ.

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