Sidekiq UploadedFile成为哈希

时间:2014-01-24 15:59:41

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

我要做的是使用Sideqik在后台从文件中读取一些数据。我的问题是,当我将UploadedFile从我的控制器传递给worker时,它从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
  ...

在引发异常的地方,“File is:Hash:”后面跟着一大堆任意的东西,我想象的是文件内容的表示,后跟“'original_filename'=>'Foo.xls'”和其他这样的领域。

为什么它变成哈希?我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

根据sidekiq documentation

  

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

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