У меня есть задача rake, которую мне нужно запустить на Heroku в фоновом режиме как разовую задачу. Однако задачи довольно большие, и я столкнулся с «Ошибкой R14 (превышение квоты памяти)» и надеялся, что смогу получить несколько советов о том, как этого избежать.
По сути, задача просматривает таблицу «Товары» и находит товары, у которых нет изображений Product.where(images: nil)
. Затем задача циклически перебирает каждую запись; используя product.url
, он открывает соединение с удаленным веб-сайтом (используя Nokogiri) и извлекает изображения и некоторые дополнительные данные. Размер изображений изменяется с помощью mini_magick и сохраняется в корзину S3 с помощью несущей волны.
У меня есть около 39000 записей, которые нуждаются в обработке, но примерно после 500 я получаю сообщение об ошибке превышения квоты памяти, и задача останавливается.
Я понимаю, почему это довольно интенсивная задача памяти, но мне было интересно, может ли кто-нибудь указать мне правильное направление относительно того, как я могу очистить память после обработки и сохранения каждой записи (или даже после каждых 100 записей) .
В качестве альтернативы/дополнительно есть ли способ автоматического перезапуска задачи Heroku после ее автоматического завершения?