【问题标题】:Paperclip and Phusion Passenger NoHandlerError回形针和 Phusion 乘客 NoHandlerError
【发布时间】:2013-02-16 19:44:07
【问题描述】:

我按照本指南通过 AJAX 进行拖放文件上传:http://dannemanne.com/posts/drag-n-drop_upload_that_works_with_ror_and_paperclip

在我使用 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)等。

有什么想法吗?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails-3 rack passenger


    【解决方案1】:

    您引用的示例期望文件流是一个 StringIO 对象,但Passenger 给您的是一个 PhusionPassenger::Utils::RewindableInput 对象。

    幸运的是,在这种情况下,RewindableInput 类似于 StringIO,因此 Paperclip 的 StringioAdapter 可用于包装您的上传流。

    在 parse_raw_upload 的 if 块中,最后执行:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多