Загрузка нескольких изображений в Imgur API с Ruby происходит медленно

Итак, у меня есть форма, которая может отправлять несколько изображений одновременно. Я также написал обертку для Imgur API на Ruby. Моя проблема в том, что, поскольку это происходит полностью синхронно, это занимает вечность и время ожидания даже для 10 изображений. Мне интересно, есть ли лучший способ, который мог бы обрабатывать больше изображений.

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

class MissionsController < ApplicationController
  def add_images
    image_ids = params[:images].collect do |image|
      Image.with_imgur(
        title: "#{@mission.trip.name} - #{current_user.username}",
        image: image,
        album_id: @mission.album.imgur_id,
        user_id: current_user.id,
        trip_id: @mission.trip_id
      ).imgur_id
    end
  end
end

class Image < ActiveRecord::Base
  def self.with_imgur(options)
    trip_id = options.delete(:trip_id)
    user_id = options.delete(:user_id)
    image = Imgur::Image.create(options)
    create(
      imgur_id: image["id"],
      link: image["link"],
      trip_id: trip_id,
      user_id: user_id
    )
  end
end

https://github.com/tomprats/toms-missions/blob/master/app/models/imgur.rb#L116

class Imgur::Image < Base
  def self.create(options)
    url = "https://api.imgur.com/3/image"
    params = {
      image: options[:image],
      album: options[:album_id],
      type: options[:type] || "file", # "file" || "base64" || "URL"
      title: options[:title],
      description: options[:description]
    }
    api_post(url, params).body["data"]
  end
end

person Tom Prats    schedule 14.10.2015    source источник


Ответы (1)


Я бы посмотрел Typhoeus https://github.com/typhoeus/typhoeus - я использовал это в прошлом для обработки загрузок и т. д. в Amazon Glacier. Я обнаружил, что это может быть намного быстрее - Typhoeus дает вам объект будущего и обрабатывает вашу загрузку в фоновом режиме, не блокируя приложение.

Надеюсь, это поможет!

person Matt Rayner    schedule 14.10.2015