2015-03-19 41 views
4

我使用的是與importing csv and excel Railscast類似的想法,但由於該集中的標準代碼需要一些時間來處理(使用ActiveRecord爲每行創建一條新記錄在文件中)我在Heroku上超時,並希望將導入過程轉移到後臺作業。Rails - ActionDispatch :: Http :: UploadedFile在後臺作業

我一直不成功,在發送文件變量(它的類型是ActionDispatch :: HTTP :: UploadedFile的),以工作所以不是我送的file.original_filename和file.path

工作的各個變量失敗,出現錯誤file /var/folders/q3/xn0bp7yd2m56_4lbq0069jj80000gn/T/RackMultipart20150319-72431-1a4pnja.xlsx does not exist,我認爲正在發生的事情,因爲該文件已經在工作之前刪除開始爲:

上傳的文件是臨時文件,其壽命是一個請求。當對象完成時,Ruby會取消鏈接該文件,因此不需要使用單獨的維護任務來清除它們。

ActionDispatch::Http::UploadedFile

可以將文件上傳與ActionDispatch :: HTTP :: UploadedFile的不是在後臺作業中使用?我使用Rails 4.2,ActiveJob和Resque

回答

5

沒有

,上傳的文件不能在後臺作業中使用。你需要做的是將上傳的文件保存到一個更加永久的位置,以供後臺作業處理。

你的控制器都需要類似:

file_path_to_save_to = '/path/to/file' 
File.write(file_path_to_save_to, params[:uploaded_file].read) 
BackgroundJob.perform_later file_path_to_save_to 
+0

感謝您的幫助。所以看到我在Heroku上時,我應該使用像AWS S3這樣的保存位置? – Marklar 2015-03-19 04:03:07

相關問題