WedX - журнал о программировании и компьютерных науках

фоновая загрузка изображений на S3 с помощью Paperclip и Delayed Jobs

Я создаю API для мобильных приложений, который поддерживает загрузку изображений с помощью Paperclip. Скрепка настроена на хранилище S3 и работает нормально.

Я хочу выполнить загрузку с сервера на S3 в фоновом режиме с помощью отложенных заданий (приложение будет размещено на Heroku).

Попытка что-то вроде @user.delay.photo = File.open(...) приводит к ошибкам отложенных заданий.

UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream

как сделать фоновую загрузку?


Ответы:


1

Проблема в том, что объекты ввода-вывода не могут быть маршалированы и легко возвращены.

Используя метод .delay, он пытается сбросить объект в записи базы данных и извлечь его обратно при обработке задания. Поступая таким образом, пластинка получается большой и ломкой.

Вместо этого лучше использовать специальное задание, если у вас много дел.

class UploadJob < Struct.new(:user_id)
  def perform
    user = User.find(user_id)
    user.photo = File.open(.....)
  end
end

Delayed::Job.enqueue UploadJob.new(@user.id)

Вы можете сделать это сами, записав образ в каталог tmp в проекте и ссылаясь на него из задания. В последнюю очередь сделайте уборку, когда работа будет закончена.

Или вы можете попробовать этот драгоценный камень: delayed_paperclip, который более удобен.

28.05.2012
  • фотография находится в params[:photo], как мне передать ее отложенной работе? Struct.new(:user, :photo) и user.photo = photo не работают 29.05.2012
  • params[:photo] — загруженный файл? 29.05.2012
  • это часть изображения составной/почтовой формы. user.photo = params[:photo] работает без отложенных заданий (с скрепкой) 29.05.2012
  • спасибо, я пометил ответ как принятый, вы знаете, как использовать delayed_paperclip только для фоновой загрузки изображения? 29.05.2012
  • загрузка — это процесс, при котором пользователь отправляет файл на сервер. Я думаю, что это невозможно сделать. В то время, когда файл приходит, он запускает рельсы и уже переходит в контроллер. Мы можем выполнять дальнейшие фоновые процессы только после загрузки, такие как изменение размера, загрузка на s3, .... 30.05.2012
  • Я имел в виду фоновую загрузку на S3, это то, что я пытаюсь сделать 30.05.2012
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]