在邮件中发送巨大的CSV文件作为附件,我得到很晚的响应,有时请求会超时

时间:2016-09-16 08:47:03

标签: ruby-on-rails ruby csv delayed-job

我有大约30,000份订单(记录)。 从控制器我发送一封包含订单(记录)CSV的电子邮件,使用延迟作业进行后台处理。代码就像 -

OrderNotifier.delay.send_orders_csv(current_user, arranged_orders)

在邮件中 -

  def send_orders_csv(logged_in_user, orders)
     @user = logged_in_user
     attachments['orders.csv'] = { mime_type: 'text/csv', content: Order.orders_csv(logged_in_user, orders) }
     mail(to: logged_in_user.email, subject: 'Orders CSV')
  end

当它将行插入Delayed :: Job时需要花费很多时间,因为我需要将近30,000条记录作为CSV附件发送。 我试过增加delayed_job工作者。但它并没有解决它。

如何立即在CSV文件中发送包含大量记录的电子邮件?

2 个答案:

答案 0 :(得分:1)

最好压缩CSV文件或发送链接到文件

答案 1 :(得分:0)

我找到了解决方法。 正如我在提到的那样,我正在使用延迟工作,而且我将大量数据传递给邮件程序,这意味着延迟工作存储了该对象的元数据。并且为了存储大约30k记录的元数据,所以我将过滤器参数传递给了邮件程序

def send_orders_csv(logged_in_user, orders_params)
  orders = Order.fetch(orders_params)
  @user = logged_in_user
  attachments['orders.csv'] = { mime_type: 'text/csv', content: Order.orders_csv(logged_in_user, orders) }
  mail(to: logged_in_user.email, subject: 'Orders CSV')
end

这也减少了空间和时间的复杂性。