2013-07-21 5 views
2

Я использую комбинацию Heroku + Amazon S3 + Paperclip gem для загрузки файлов. Он работает, но сама загрузка очень медленная.Rails + Paperclip на Heroku очень медленный

Я пытался купить дополнительный дино и немного обновила модель:

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 с помощью Paperclip и отложенной работы? Что мне не хватает, чтобы правильно настроить его?

Благодаря

+0

Исследование прямой загрузки на s3 –

ответ

0

Попробуйте новый Gem называется CarrierWaveDirect он позволяет загружать файлы прямо на S3 с помощью HTML-форм и легко перемещать обработку изображения в качестве фонового процесса

0

Вы никогда не сможете избежать время, необходимое после завершения загрузки с ПК на завершенную обработку времени (и/или копирование на s3) с точки зрения пользователя

Лучшее, что вы можете сделать, это улучшить свой UX, но либо отобразить сообщение о том, что файл еще не был завершите обработку и попросите пользователя вернуться и попробовать позже.

Тем не менее, вы можете загрузить прямо на s3 (но без скрепки, так вот и вашего процессора, и вы должны ImageMagick на серверах Heroku (или любых других серверах), чтобы обработать ваши стили.

посмотреть 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

это может довольно боль обрабатывать все это самостоятельно, когда небольшое сообщение пользователя все, что заботится о вашей исходной задаче (которая должна улучшить дружественный пользователь)

0

1) Вы можете изменить местоположение вашего s3-контейнера на US East в качестве дополнительного решения, если это возможно для вашего приложения. Это не будет полностью исправлять проблему, но улучшит скорость загрузки.

2) Вы можете использовать s3_direct_upload для прямой загрузки на s3. http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and

0

В последнее время я предпочитаю делать обработку изображений во времени. Слишком много раз я использовал paperclip только для того, чтобы изменить требования к интерфейсу во время редизайна, заставляя меня перерабатывать все изображения 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>') %> 
Смежные вопросы