Как исправить ошибку 'SystemStackError: уровень стека слишком глубокий' с большим количеством условий ActiveRecord - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть запрос ActiveRecord, который итеративно добавляет или обуславливает поиск:

places.each do |place|
  people = people.or(People.within_radius_of(place.latitude, place.longitude, place.radius).select(:id))
end

scope :within_radius_of, ->(lat = nil, lon = nil, radius = 100_000) {
  where(earth_box(lat, lon, radius)).where(earth_distance_less_than(lat, lon, radius)) if lat.present? && lon.present?
}

earth_box и earth_distance_less_than являются просто функциями для генерации sql postgresql для запросов earth_box и earth_distance.

Это работает без проблем с нашей первоначальной максимальной целью в 100 мест, но 600 мест были добавлены в поиск, и я получаю слишком большой уровень стека.

Каковы последствия увеличенияразмер стека?По умолчанию установлено значение 1 МБ, например, какие проблемы могут возникнуть, если установить значение 8 МБ или более?

Можно ли переписать этот запрос, чтобы избежать ошибки?

...