Rails - 后台作业中的ActionDispatch :: Http :: UploadedFile

时间:2015-03-19 03:04:21

标签: ruby-on-rails ruby-on-rails-4 resque rails-activejob

我使用与importing csv and excel Railscast中类似的想法,但由于该剧集中的标准代码需要一些时间来处理(使用ActiveRecord为文件中的每一行创建新记录)I&# 39;在Heroku上获得超时,并希望将导入过程转移到后台工作。

我没有成功将文件变量(类型为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

1 个答案:

答案 0 :(得分:9)

不,上传的文件无法在后台作业中使用。您需要做的是将上传的文件保存到更长久的位置,以便后台作业进行处理。

你的控制器需要类似的东西:

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