Я строию приложение на рынке в Rails 4, где продавцы могут перечислить предметы для продажи. У меня есть функция импорта csv, поэтому продавцы могут загружать навалом продукты. Код импорта работал отлично на небольших файлах, но я столкнулся с проблемами таймаута с большими файлами. Поэтому я хочу использовать delayed_job для обработки этих файлов в фоновом режиме.Rails 4 - Delayed_Job для импорта CSV
Я установил delayed_job до точки, где задание находится в очереди (я вижу задание в таблице delayed_job). Но когда я запускаю задание, я получаю сообщение о том, что файл, который нужно импортировать, не найден. Он ищет файл во временной папке, которая не существует, когда задание выполняется.
Как сохранить (или не сохранить) файл в том месте, где delayed_job может получить к нему доступ? И как сообщить delayed_job, где находится файл? Контроллер
мои объявления:
def import
Listing.import(params[:file], params[:user_id])
redirect_to seller_url, notice: "Products are being imported."
end
мой список модель:
class Listing < ActiveRecord::Base
require 'csv'
require 'open-uri'
class << self
def importcsv(file_path)
CSV.foreach(file_path, headers: true, skip_blanks: true) do |row|
#some model processing
end
end
handle_asynchronously :importcsv
end
# My importer as a class method
def self.import(file, user_id)
Listing.importcsv file.path
end
end
Вот вид формы:
<%= form_tag import_listings_path, multipart: true do %>
<%= file_field_tag :file %>
<%= hidden_field_tag :user_id, current_user.id %>
<%= submit_tag "Import CSV" %>
<% end %>
Я просто добавил вид формы, когда вы писали свой ответ. Ты прав. Можете ли вы рассказать мне, как это сделать? – Moosa