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

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

我使用了与importing csv and 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,我认为这是正在发生的原因,因为在作业开始之前文件已被删除,如下所示:

Uploaded files are temporary files whose lifespan is one request. When the object is finalized Ruby unlinks the file, so there is no need to clean them with a separate maintenance task.



ActionDispatch::Http::UploadedFile

使用ActionDispatch::Http::UploadedFile上传的文件不能在后台作业中使用吗?

我正在使用Rails 4.2,ActiveJob和Resque

最佳答案

不可以,上传的文件不能在后台作业中使用。您需要做的是将上传的文件保存到一个更永久的位置,以供后台作业处理。

您的 Controller 将需要执行以下操作:

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

关于ruby-on-rails - Rails-后台作业中的ActionDispatch::Http::UploadedFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136542/

相关文章:

ruby-on-rails - 之后如何为 gems 安装 ri 和 rdoc 文件?

heroku - 是否有人在 Heroku Dyno 中运行多个 resque worker?

ruby-on-rails - 测试重新调度器

ruby-on-rails - 是否有适用于Ruby on Rails的(本地)HTML验证器?

javascript - jQuery:如何记住多步 Rails 3 表单中的选择?

ruby-on-rails - Ruby on Rails - form_for 的自定义 PATCH 操作

ruby-on-rails - rails : Using different model fields in ActiveRecord Concern

ruby-on-rails - 事件登记表

ruby-on-rails-4 - bootstrap3 datetimepicker 无法加载语言环境

heroku - Resque Scheduler发送到队列但不处理