У меня есть запрос 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 МБ или более?
Можно ли переписать этот запрос, чтобы избежать ошибки?