2014-01-27 100 views
4

我正在從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已允許我驗證圖像文件幾乎立即返回元數據,但大型非圖像文本文件需要很長時間才能處理。

對於我的應用程序,我允許用戶以任何格式上傳文檔,因此我必須能夠有效地處理圖像和文本文件。有其他人遇到過這個問題嗎?有沒有辦法有選擇地禁用調用identify在回形針某些文件格式,但不是其他人?否則,如果這是一個選項,我們可以簡單地不要致電identify。也許有一種方法可以將ImageMagick配置爲更適合處理大型文本文件?

回答

2

如果您實際上沒有後處理文件,請告訴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制止過程,但回形針可致電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 
+0

憑藉before_post_processing callbac k是關鍵!事實證明,我的性能問題不在於上面描述的設置,而是在圖像被複制到永久性永久更改日誌中,我們正在執行後期處理以縮略圖。最後,我檢查了附件的內容類型以選擇性地處理或不進行處理。 – emcallaway