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

Mar*_*lar 8 ruby-on-rails resque ruby-on-rails-4 rails-activejob

我正在使用与导入csv和excel Railscast类似的想法,但由于该剧集中的标准代码需要一些时间来处理(使用ActiveRecord为文件中的每一行创建新记录)我在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

Rob*_*rco 10

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

您的控制器需要类似于:

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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的帮助。那么既然我在 Heroku 上,我应该使用像 AWS S3 这样的保存位置吗? (2认同)