2013-03-02 50 views
2

我跟着本指南来了解拖动并通过AJAX拖放文件上传:http://dannemanne.com/posts/drag-n-drop_upload_that_works_with_ror_and_paperclip回形针和的Phusion客运NoHandlerError

一切工作我与WebBrick开发环境很好,但如果我部署到PhusionPassenger然后我得到:

Paperclip::AdapterRegistry::NoHandlerError (No handler found for #<PhusionPassenger::Utils::RewindableInput:0x000000041aef38 @io=#<PhusionPassen... 

我在我的控制器使用此:

before_filter :parse_raw_upload, :only => :bulk_submissions 

def bulk_submissions 
    ... 
    @submission = Submission.create!(url: "", file: @raw_file, description: "Please edit this description", work_type: "other", date_completed: DateTime.now.to_date) 

    ...  
end 

private 
def parse_raw_upload 

    if env['HTTP_X_FILE_UPLOAD'] == 'true' 
    @raw_file = env['rack.input'] 
    @raw_file.class.class_eval { attr_accessor :original_filename, :content_type } 
    @raw_file.original_filename = env['HTTP_X_FILE_NAME'] 
    @raw_file.content_type = env['HTTP_X_MIME_TYPE'] 
    end 
end 

在自己所有的标头设置请求(X_MIME_TYPE来看, X_FILE_NAME)等。

任何想法?

在此先感谢!

回答

3

你从恶癖的例子预计文件流是一个StringIO对象,但乘客是给你一个PhusionPassenger :: utils的:: RewindableInput对象,而不是。

幸运的是,RewindableInput是duckalike到StringIO的这种情况,所以回形针的StringioAdapter可以用来包装你的载流。

在parse_raw_upload if块,在里面到底,做到:

if @raw_file.class.name == 'PhusionPassenger::Utils::RewindableInput' 
    @raw_file = Paperclip::StringioAdapter.new(@raw_file) 
end 
+1

我有我也有类似的问题与独角兽。你的回答帮助了我。谢谢。链接到独角兽的问题:http://stackoverflow.com/q/19359071/1530784 – MaxKonin 2013-10-15 07:13:29