【问题标题】:Rails - ActionDispatch::Http::UploadedFile in background jobRails - 后台作业中的 ActionDispatch::Http::UploadedFile
【发布时间】:2015-05-22 02:12:52
【问题描述】:

我正在使用与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,我认为这是因为在作业开始之前文件已被删除:

上传的文件是临时文件,其生命周期是一个请求。当对象最终确定时,Ruby 会取消链接文件,因此无需使用单独的维护任务来清理它们。

ActionDispatch::Http::UploadedFile

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

我正在使用 Rails 4.2、ActiveJob 和 Resque

【问题讨论】:

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


    【解决方案1】:

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

    您的控制器需要类似:

    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
    

    【讨论】:

    • 感谢您的帮助。所以看到我在 Heroku 上,我应该使用像 AWS S3 这样的保存位置?
    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多