Рельсы посмотреть, как сделать для 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"
вот и все.