Я делаю доставку электронной почты в фоновом режиме (более 1k писем).Сервер находится на Heroku.Для фоновых задач я использую sucker_punch
.Rails - 4.1.6, веб-сервер - passenger
.Это мой код:
def email_blast message, child_message_id, resend
@download_url = message.doc_file_size ? message.doc.url : ''
@subscriber = message.subscriber
@message = message
send_message child_message_id, resend
end
def send_message child_message_id, resend
messages = child_message_id ? Message.where(id: child_message_id) : Message.where(parent_message_id: @message.id)
messages = messages.joins(:pending_messages).uniq if resend && child_message_id.nil?
subject = 'New Message'
type = @message.type.split('::').second || @message.type.split('::').first
messages.each do |message|
send_mail message.all_email_addresses, action_name, subject, message, type
end
end
def send_mail emails, template, subject, model, type
response = mail(to: emails, subject: subject,
template_name: template).deliver!
create_track_emails response.string.split(' ').third.strip, get_status(response), 'delivered', emails, model, type
rescue => e
create_track_emails '00000', 'failed', e.message, emails, model, type
end
def get_status response
response.status == '250' ? 'success' : 'failed'
end
def create_track_emails smtp_message_id, status, description, emails, model, type
id = type == 'Logon' ? model.id : model.to_id
emails.each do |email|
model.track_emails.create(email_address: email,
status: status,
status_description: description,
smtp_message_id: smtp_message_id,
subscriber_id: model.subscriber_id,
user_id: id,
message_type: type)
end
end
Я наблюдаю утечку памяти.Я также вижу, что частичное время рендеринга увеличивается с каждой буквой:
Скажите, пожалуйста, в чем может быть проблема и куда копать.