我有大约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文件中发送包含大量记录的电子邮件?
答案 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
这也减少了空间和时间的复杂性。