2011-02-08 2 views
0

Я строй приложения рельсы, которое взаимодействует с 3-участником APIПроводка многокомпонентных данные форм с Рубином

Когда пользователь загружает файл на рельсы, он должен быть направлен на сайт 3 партии через POST HTTP ,

В некоторых случаях загрузка может составлять несколько сотен МБ.

На данный момент, я только что был повторно размещение в API с помощью Net :: HTTP и доступ к многослойную форму объекта, как так

@tempfile = Params [: видео] [: file_upload] .tempfile

Это хелла медленно, хотя и выглядит немного грязным.

Есть ли лучший способ сделать это?

ответ

1

Можно ли иметь запись пользователя непосредственно в службу 3 партии или вы должны обрабатывать API через ваш Rails стек? В идеале вы могли бы это сделать, и вам не пришлось бы загружать файл в ваш стек, а затем повторно отправлять его в API. Если вы не можете публиковать сообщения напрямую, я бы порекомендовал посмотреть, есть ли у API потоковая служба, чтобы вы могли отправлять части файла, а не всю вещь сразу. В любом случае, я думаю, вы начнете работать с ошибками Timeout на своей стороне и со стороны API с большими файлами, поэтому вам придется увеличить свои собственные тайм-ауты или создать другой тип загрузчика потокового файла.

+0

Чем больше я думаю об этом, тем больше согласен с этим вариантом ... Мне нужно вести запись файлов, загруженных в мою собственную БД, но API предлагает обратные вызовы - мне просто нужно поймать обратные вызовы и создать новые записи с теми methinks – bodacious

+0

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

+0

Большое спасибо PK! – bodacious

0

Спрятать фоновое задание с использованием DelayedJob. В отложенной работе вы можете попробовать рельсы redirect_to.

https://github.com/tobi/delayed_job

http://apidock.com/rails/ActionController/Base/redirect_to

+0

Вы имеете в виду загрузить файл в место tmp на моем сервере, а затем создать DelayedJob для публикации в фоновом режиме и очистки после его завершения? – bodacious

+1

Я думаю, что промежуточный файл tmp не требуется. Вы можете просто сделать redirect_to с файлом. – rmk

Смежные вопросы