Рельсы посмотреть, как сделать для FTP-сервера в определенное время суток?

У системы rails в моей компании есть представление, в котором мы можем просматривать и загружать CSV-файл, а затем, разумеется, вручную передавать его по FTP на удаленный сервер. Потребность в автоматическом ftp содержании (то есть, рендеринг html.erb в csv-файл) в полночь возникает каждый день, и я понятия не имею. Кто-нибудь может помочь? намек или, может быть, драгоценный камень?

Thaanks

мой код вроде: в контроллере

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 автоматически. Я надеюсь, что это будет понятнее для того, что мне нужно.

1 ответ

Один из наших системных инженеров решает проблему,

Он просто добавляет действие как

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"

вот и все.

Другие вопросы по тегам