Я использую операторскую волну для загрузки видеофайлов и кодирования этих видео с помощью Transloadit. Каков наилучший способ сделать это в рельсах с отложенной работой. пожалуйста, предложите.
RAILS как лучше загрузить большой файл › 2 Гб
Ответы (2)
Есть несколько вариантов (чисто HTTP-сторона, даже не говоря о языках программирования).
Вопрос действительно зависит от вашей среды (сред), навыков, поддержки и т. д. Что я заметил в «реальном мире», так это то, что если вы отправляете> 100 МБ на сервер по HTTP-запросу, это не удастся. У ваших клиентов, скорее всего, очень плохая скорость загрузки (большинство интернет-соединений soho имеют> 10M вниз, но ‹1M вверх), поэтому вы в конечном итоге столкнетесь с тайм-аутом (маршрутизатор / таблицы nat / брандмауэр / веб-сервер / скрипты).
1) Действительно большой POST (плохая практика, потенциально может потреблять много памяти, сбой означает, что вам нужно начинать все сначала и оставляет ваш сервер открытым для DDoS)
2) Использование «модуля загрузки» для Apache/nginx (требуется компиляция и, как правило, много головной боли для его настройки, но он работает хорошо, может не работать со всеми ситуациями хостинга)
3) Потоковая передача в ваших клиентских и серверных скриптах. Работает хорошо. Я бы также рекомендовал разбивать ваши загрузки на ‹10 МБ, а в случае сбоя — возможность перезапуска чанков.
У меня нет большого опыта работы с ди-джеем, но фоновая обработка имеет одинаковый подход ко всем инструментам.
Сначала вы должны просто загрузить свой файл куда-нибудь (файловая система, Amazon S3, что угодно). DJ не справится с этой задачей. Вы должны сделать это в своем действии контроллера.
Затем, после загрузки, вы можете создать диджейскую задачу, которая кодирует ваше видео и выполняет другие связанные задачи.
Например, вы можете запустить DJ после фиксации в своей видеомодели, например
class Video < AR::Base
after_commit :encode_in_background
private
def encode_in_background
self.delay.encode(id)
end
def encode
# code that runs in background
end
end
В моем примере может быть неправильный синтаксис, но основная идея заключается в том, что вы загружаете видео через контроллер, а затем запускаете задание фоновой обработки.