【问题标题】:Performance issues uploading large text files via Paperclip通过回形针上传大型文本文件的性能问题
【发布时间】:2014-01-27 19:06:34
【问题描述】:

我正在从 Ruby 1.8.7 升级到 1.9.3 以及从 Rails 2.3 升级到 3.2 作为升级的一部分,我正在从 Paperclip 2.2.9 升级到 3.5.2。我的 ImageMagick 版本是 6.8.6。作为升级过程的一部分,我发现的一个问题是,对于大型 (~1 MB) 文本文件,上传性能非常差。有问题的文件不需要特别是 .txt 文件,任何纯文本格式的文件(例如 .xml 文件)也会受到影响。

供您参考,这是我的回形针设置:

  has_attached_file :attachment,
    :url => "/shared_documents/:id/:basename.:extension",
    :path => ":rails_root/user_uploaded_content/shared_documents/:id/:basename.:extension"

为简单起见,我省略了我们的验证等,因为我们只是检查文件大小和存在。

观察我的开发机器上运行的顶级进程,似乎在 Paperclip 调用 ImageMagick 的identify 命令时出现了瓶颈。通过命令行对各种文件调用 identify 使我能够验证图像文件的元数据几乎立即返回,但大型非图像文本文件需要很长时间才能处理。

对于我的应用程序,我允许用户以他们喜欢的任何格式上传文档,因此我必须能够有效地处理图像和文本文件。有没有其他人遇到过这个问题?有没有办法选择性地禁用对 Paperclip 中某些文件格式而不是其他文件格式的调用 identify?如果做不到这一点,我们可以忍受不打电话给identify(如果这是一个选项)。也许有办法设置配置 ImageMagick 以更优雅地处理大型文本文件?

【问题讨论】:

    标签: ruby-on-rails ruby imagemagick paperclip


    【解决方案1】:

    如果您实际上并未对文件进行后期处理,只需告诉 Paperclip 不要对它们进行后期处理。从 Paperclip 文档中,您可以通过多种方式执行此操作。一种是在模型中提供一个空的样式列表:

    has_attached_file :attachment, 
      styles:{}, 
      url: "/shared_documents/:id/:basename.:extension",
      path: ":rails_root/user_uploaded_content/shared_documents/:id/:basename.:extension"
    

    或者,您可以不提供处理器

    has_attached_file :attachment, 
      processors:[], 
      url: "/shared_documents/:id/:basename.:extension",
      path: ":rails_root/user_uploaded_content/shared_documents/:id/:basename.:extension"
    

    或者,您可以在模型中使用 before_post_process 回调并返回 false 以停止该过程,但 Paperclip 可能会首先调用 identify 来验证文件,这会使该选项对您的情况毫无意义:

    has_attached_file :attachment, 
      url: "/shared_documents/:id/:basename.:extension",
      path: ":rails_root/user_uploaded_content/shared_documents/:id/:basename.:extension"
    
    before_post_process :skip_processing
    
    def skip_processing
      false
    end
    

    【讨论】:

    • 利用 before_post_processing 回调是关键!事实证明,我的性能问题不在于上面描述的设置,而是当图像被复制到永久永久更改日志时,我们正在进行后期处理以提取缩略图。最后,我检查了附件的内容类型以选择性地处理或不处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多