0

我公司的 Rails 系统有一个视图,我们可以在其中查看和下载 csv 文件,然后将文件 ftp 到远程服务器,当然是手动的。每天午夜自动 ftp 内容(即将 html.erb 渲染为 csv 文件)的需求出现了,我不知道。任何人都可以帮忙吗?提示或宝石?

坦克斯

我的代码如:在控制器中

def invoice_list
    respond_to do |format|
      format.html
      format.csv { send_data Invoice.to_csv }
    end
end

发票模型

def self.to_csv(options = {})
    CSV.generate(options) do |csv|
      csv << column_names
      Invoice.where("created_at > Date.yesterday").each do |invoice|
          csv << invoice.attributes.values_at(*column_names)  
      end
    end
end

通常,用户请求页面并按下浏览器上的按钮以下载 csv 文件。然后将下载的文件ftp到远程服务器进行手动进一步处理。现在用户要求整个过程,包括下载 csv 文件,可以在每天上午 12:00 自动开始。我希望这对于我需要的东西会更清楚。

4

1 回答 1

0

我们的一位系统工程师解决了这个问题,

他只是添加了一个动作

def upload_invoice
  require 'net/ftp'
  require 'stringio'

  content = Invoice.to_csv
  f = StringIO.new(content)

  host = "XXX.XXX.XXX.XXX"
  user = "your username"
  password = "password"
  filename = "invoices_#{DateTime.now.to_date.strftime("%Y%m%d")}"

  ftp = Net::FTP.new(host, user, password)
  ftp.passive = true
  ftp.storlines("STOR #{filename}", f)
  ftp.close
  f.close
  render nothing: true
end

并在每天特定时间运行的 crontab 中添加此作业:

curl -XPOST "https://www.yoursite.com/yourpath/upload_invoice"

而已。

于 2014-01-21T05:59:01.287 回答