【问题标题】:Sidekiq UploadedFile becomes HashSidekiq UploadedFile 变成 Hash
【发布时间】:2014-01-25 00:11:28
【问题描述】:

我想要做的是使用 Sideqik 从后台文件中读取一些数据。我的问题是,当我将 UploadedFile 从控制器传递给工作人员时,它从 UploadedFile 变为 Hash。

在我的控制器的创建方法中:

file = params[file_key]                                                   
if not (file.nil? or file.class == ActionDispatch::Http::UploadedFile)    
  raise "File not a file in Controller!"                                  
elsif not file.nil?                                                       
  ImporterWorker.perform_async(name, file)                                
end

没有引发异常,我们愉快地继续使用 ImporterWorker,它具有:

def perform(name, file)                                                                                                    
  if not file.class == ActionDispatch::Http::UploadedFile                     
    raise "File is: #{ file.class }:#{ file.inspect }"             
  end
  ...

引发异常的地方,“文件是:哈希:”后面跟着一大串我想是文件内容的表示,后面跟着“'original_filename'=>'Foo.xls'”,和其他此类字段。

为什么会变成哈希?我能做些什么来解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby file-upload hash sidekiq


    【解决方案1】:

    根据sidekiq documentation

    在您的应用程序代码中创建作业的方法有 3 种 ... 所有三种方式都创建了一个代表作业的哈希,将其序列化 散列到 JSON 字符串并将该字符串推送到 Redis 中的队列中。 这意味着您的工作人员的参数必须是简单的 JSON 数据类型 (数字、字符串、布尔值、数组、哈希)。复杂的 Ruby 对象(例如 日期、时间、ActiveRecord 实例)将无法正确序列化。

    所以你需要更永久地存储文件,然后将文件路径传递给作业以进行进一步处理

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多