如何使用 ruby on rails 将活动记录数据导出到 excel 文件并将 xlsx 文件保存到 Amazon S3 存储桶而不将其存储在本地机器上

How to export active record data to excel file and save xlsx file into Amazon S3 bucket without storing it on local machine using ruby on rails

在我们的 rails 6 项目中,我想将活动记录数据导出到 excel 文件并将 xls 文件保存到 S3 存储桶中,而不将 xls 数据存储在本地数据库上并发送文件 link发送电子邮件并提供从电子邮件下载 xls 功能。请帮助我。

1。创建一个包含导出文件的模型

# app/models/csv_export.rb

class CsvExport < ApplicationRecord
  has_one_attached :file
  # ...
end

将 ActiveStorage 配置为使用 S3 作为提供程序。参见 https://medium.com/alturasoluciones/setting-up-rails-5-active-storage-with-amazon-s3-3d158cf021ff

2。创建一个导出作业,该作业创建一个新的 CsvExport with data

# app/jobs/csv_export_job.rb
require 'csv'

class CsvExportJob < ApplicationJob
  queue_as :default

  def perform(csv_export_id)
    csv_export = CsvExport.find_by(id: csv_export_id)
    csv_export.file.attach \
      io: StringIO.new(csv_string), # add csv_string call here
      filename: filename
    # ...
  end

  private

  # ...

  CSV_COLUMNS = %w[id name email].freeze

  def csv_string
    CSV.generate(headers: true) do |csv|
      csv << CSV_COLUMNS
      # or whatever data you want to export
      User.all.each do |contact|
        csv << CSV_COLUMNS.map { |col| contact.send(col) }
      end
    end
  end
end

3。触发作业

例如来自控制器操作

csv_export = CsvExport.create(status: :started)
CsvExportJob.perform_later csv_export.id

我希望这些例子能给您带来正确的方向。如果您需要详细帮助,可以查看这篇文章 https://railsbyexample.com/export-records-to-csv-files-using-activestorage/