Я работаю над задачей показать маркеры местоположения на карте Google. В моей таблице около 40 тысяч записей. Мне нужно создать маркер местоположения для всех этих записей. Я использую gem gmaps4rails с моим приложением ruby on rails. Я использую Passenger Standalone в качестве сервера приложений.
Вот мой код
my_models_controller.rb
def index
@markers = []
MyModel.select(:id, :first_name, :latitude,:longitude).find_in_batches do |batch_records|
@markers += Gmaps4rails.build_markers(batch_records) do |record, marker|
marker.lat record.latitude
marker.lng record.longitude
marker.title record.first_name
marker.infowindow "<span> #{record.first_name} </span> "
end
end
end
index.html.haml
:javascript
var markers_json = #{raw @markers.to_json};
%h1
- markers = nil
#my_model_map.map{ style: 'width: 100%; height: 600px;' }
my_model.js
if(typeof Gmaps !== 'undefined' && $('#my_model_map').length) {
handler = Gmaps.build('Google', { markers: { maxRandomDistance: null } });
handler.buildMap({ provider: {}, internal: { id: 'my_model_map' } }, function() {
if(typeof markers_json !== 'undefined') {
markers = handler.addMarkers(markers_json);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
}
});
}
Я попытался выбрать необходимые столбцы и добавил пакетную обработку, чтобы уменьшить потребление памяти. Но это все еще занимает около 200 МБ при создании хэша для маркеров карты Google для всех этих записей.
Проблема здесь в том, что он никогда не освобождает эту память после обработки каждого запроса. И увеличение памяти происходит постепенно. Кто-нибудь может посоветовать мне, какая часть моего кода вызывает утечку памяти?