首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:常规提要的后台任务

Rails:常规提要的后台任务
EN

Stack Overflow用户
提问于 2018-03-26 09:52:16
回答 1查看 65关注 0票数 0

我对现有的应用程序有了新的要求,我想问问其他开发人员如何去开发它。我想每2天导出CSV,并提供我的销售团队饲料,他们用来批量导入指定的数据存储位置,比如说谷歌驱动器。然后,他们可以检查文件并进行上传等。

我想运行一个Heroku调度程序,它每2天运行一次,并从应用程序导出数据,将文件以特定格式保存到该存储中。

我知道我可以编写一个类方法来生成格式,使用策略模式来获取特定的头部并使用respond_to提供它,并提供一个格式csv以便用户可以通过URL访问该文件。但是我如何编写一个创建文件并将其上传到指定位置的rake任务呢?

将会非常感谢任何方向

EN

回答 1

Stack Overflow用户

发布于 2018-03-26 19:12:57

在Rails中,rake任务通常存储在lib/tasks中,并且有.rake扩展名。对于CSV部分,您可以使用Ruby的CSV API。生成CSV后,您可以将其保存在本地或将其上传到任何您想要的服务(例如S3、Google Drive等)。例如,以S3为例:

代码语言:javascript
复制
# lib/tasks/csv_tasks.rake

namespace :csv do
  desc 'Generates new feed'
  task :feed do
    client = Aws::S3::Client.new(region: 'eu-west-1',
                                 access_key_id: 'access_key_id',
                                 secret_access_key: 'secret_access_key')


    feed_csv = CSV.generate do |csv|
      # headers
      csv << [:first_name, :last_name]

      # CSV rows
      Employee.find_each do |employee|
        csv << [employee.first_name, employee.last_name]
      end
    end

    client.put_object({
      body: feed_csv, 
      bucket: 'my_bucket', 
      key: 'feed.csv', 
    })
  end
end

然后在Heroku调度器中使用定义的任务rake csv:feed

您还可以考虑为您的文件建立一个模型,以便保存它们的路径,然后在您的应用程序中轻松地显示它们。

我建议您将S3或其他凭证保存在secrets.yml文件或凭证文件(Rails 5.2+)中。要使用AWS SDK for Ruby,请将以下内容添加到Gemfile:

代码语言:javascript
复制
gem 'aws-sdk', '~> 3'

如果需要的话,在rake任务中需要它。有关如何使用S3和ruby的更多信息,请阅读here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49482890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档