如何创建CSV并将其保存到Rails的主机中?

时间:2019-12-19 03:10:43

标签: ruby-on-rails ruby csv

我有创建CSV并将其作为下载内容提供给用户的逻辑,但是我想要做的是每周在非工作时间自动创建CSV一次,然后将其上传到S3并从那里提供。希望大大减少用户的下载时间,因为生成CSV需要花费几分钟。

我唯一缺少的步骤是如何将该CSV保存到主机。我打算做的是将其保存到主机,将其上传到S3,然后从主机中删除。

有什么想法可以做到这一点吗?谢谢。

3 个答案:

答案 0 :(得分:3)

您可以像这样在主机服务器中创建并保存CSV。

CSV.open(Rails.root.join('tmp', 'csv_cache', "#{csv_name}"), "wb") do |csv|
# your logic
end

这将在tmp/csv_cache文件夹中创建一个csv_name中指定的名称的CSV。

然后您可以像这样将其上传到s3

file_url = Utils.new().upload_to_s3(csv_name, Rails.root.join('tmp', 'csv_cache', csv_name))

class Utils
 def upload_to_s3(file_name, source)
    obj = AMAZON_S3_CLIENT.bucket(S3_BUCKET).object('csv_cache/'+file_name)
    obj.upload_file source, {acl: 'public-read'}
    return obj.public_url
  end
end

然后您可以从服务器中删除文件。

答案 1 :(得分:1)

服务器上的简单bash脚本如何:

#!/bin/bash
#
# Save this file to /home/user/upload.sh

curl -o /tmp/csv_file.csv http://localhost/path/to/csv
aws s3 mv /tmp/csv_file.csv s3://bucket/

然后通过cron安排脚本

# /etc/crontab

# Run every day at 08.15
15 08 * * * user /home/user/upload.sh

注意:http://localhost/path/to/csv与您的按钮链接所指向的URL相同。

答案 2 :(得分:0)

尝试使用将每周运行CSV任务(作业)的sidekiq或cron。在此任务中,CSV使用“ CSV.open”保存到主机,然后上传到S3。

您可能需要一个表来存储文件的S3路径。或者我想您可以覆盖旧文件并重新使用S3路径。