2013-07-21 101 views
2

我使用組合Heroku + Amazon S3 + Paperclip gem來上傳文件。它正在工作,但上傳本身非常緩慢。Heroku上的Rails + Paperclip非常慢

我試圖購買額外的賽道和一點點更新模型:

class Image < ActiveRecord::Base 

    belongs_to :imageable, :polymorphic => true 
    belongs_to :user 
    belongs_to :album 

    attr_accessible :caption, :title, :image, :image_file_name, :user_id, :album_id 


    has_attached_file :image, 
        :styles => { :tiny => '100x100>', 
           :original => "900x900>" }, 
        :path => ":rails_root/public/images/:user_id/:style/:basename.:extension", 
        :url => ":s3_eu_url" 

    process_in_background :image 
end 

這是工作非常快在Heroku上,但我選擇要上傳的文件,點擊按鈕上傳和幾秒鐘內就會刷新頁面。我沒有看到上傳的圖片本身,因爲尚未上傳。但後臺進程會將其上傳。 當我在2-4秒後刷新頁面時,我正確地看到上傳的圖像。

但這不是非常用戶友好的方式來做到這一點。 如何使用回形針和延遲作業將圖像快速上傳到Heroku?我錯過了什麼來正確設置它?

感謝

+0

研究直接上傳到S3 –

回答

0

嘗試新的寶石叫CarrierWaveDirect它允許你上傳的文件直接到S3使用HTML表單,輕鬆地移動圖像處理成一個後臺進程

0

你將永遠無法避免從完成從pc上傳到從用戶角度完成處理(和/或複製到s3)的時間所需的時間

您可以做的最好的事情是提高您的UX,但要麼顯示文件尚未顯示的消息完成處理並要求用戶返回並稍後嘗試。

這就是說,你可以直接上傳到S3(但沒有回形針,因爲這就是你的處理器,你需要Heroku的服務器(或任何其他服務器上的ImageMagick)處理您的風格。

看到這個How do I upload direct to S3 with Paperclip has_attached_file connected to a model?

http://aws.amazon.com/articles/1434?_encoding=UTF8&jiveRedirect=1

這可能相當痛苦來處理這一切的自己,當一個小的消息給用戶的所有需要​​照顧你原來的問題(這是提高用戶friendlyness)

0

最近我更喜歡做圖像處理。太多次我使用回形針只是爲了在重新設計期間改變前端需求,迫使我重新處理批處理作業中的所有UG圖像。

我創建適用於一個簡單的寶石與讓你代理用戶上傳的圖片的,並通過更改URL參數處理這些需求的軌道:https://github.com/jcihocki/uncut

它接受相同類型的幾何路線的你在給:風格散列在回形針中。這是相對較新的,但也很簡單,我在生產中使用它。貢獻也很受歡迎。

用法:

<%= $your_cdn_base_uri + processed_image_uri_for("http://mybucket.s3.amazonaws.com/path/to/img.jpg", '100x100>') %>