В настоящее время я пытаюсь определить причину неприятной ошибки перенаправления в приложении Rails. Специфика документирована здесь, хотя я не ищу здесь конкретного решения в StackOverflow. Скорее, пока я работаю над исправлением этого, я хотел бы разработать общий способ для поиска, регистрации и исследования бесконечных циклов перенаправления в приложении Rails.
У меня есть идея здесь, но мне все равно хотелось бы посмотреть, есть ли какие-либо проверенные методы.
Моя идея:
Переопределить Rails 'redirect_to
в "log" перенаправления в сеансе:
def redirect_to(destination)
session[:redirects] << {destination: destination, timestamp: Time.now}
if is_inifinite_redirect?(session[:redirects])
render "a_redirect_error_page"
else
super
end
end
Затем сделайте некоторый анализ массива перенаправления, чтобы определить, существует ли бесконечный цикл:
def is_inifinite_redirect?(redirects)
recent = redirects.last(21) # 21 is the max redirects allowed by Chrome
return recent.odds.map(&:destination).uniq.length == 1 && \
recent.evens.map(&:destination).uniq.length == 1 && \
(recent.last.timestamp - recent.first.timestamp < 10.seconds)
end