Rails Carrwave Backgrounder с отложенными заданиями, требующими слишком много времени для загрузки

Я использую CarrierWave и CarrierWave Backgrounder(https://github.com/lardawge/carrierwave_backgrounder) с отложенной работой для загрузки файла в фоновом режиме. когда я пытаюсь загрузить свой файл, он загружается успешно, и я вижу, что задания выполняются в фоновом режиме, но я не вижу никакой разницы между использованием отложенного задания и без использования отложенного задания. это занимает одинаковое время для выполнения без отложенного задания, как это происходит с отложенным заданием. Не знаю, что пошло не так, помогите, пожалуйста. Заранее спасибо.

вот мой загрузчик

             # encoding: utf-8

        class AvatarUploader < CarrierWave::Uploader::Base

          # Include RMagick or MiniMagick support:
          # include CarrierWave::RMagick
          # include CarrierWave::MiniMagick

          include ::CarrierWave::Backgrounder::Delay
          include Sprockets::Helpers::RailsHelper

          include Sprockets::Helpers::IsolatedHelper
         # Choose what kind of storage to use for this uploader:
           storage :file
           # storage :fog

        # Override the directory where uploaded files will be stored.
        # This is a sensible default for uploaders that are meant to be mounted:
        def store_dir
          "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
        end

       def cache_dir
           ""
       end


        # Provide a default URL as a default if there hasn't been a file uploaded:
       def default_url
         "rails.png"
       end


    end

фоновый файл несущей волны внутри config/initializers/carrierwave_backgrounder.rb

            CarrierWave::Backgrounder.configure do |c|
             c.backend :delayed_job, queue: :carrierwave 
            end

Почтовая модель

        class Post < ActiveRecord::Base
          attr_accessible :description , :avatar, :remote_avatar_url
          mount_uploader :avatar,   AvatarUploader
          process_in_background :avatar
          validates_presence_of :description
        end

Действие постконтроллера

        def create
          @post = Post.new(params[:post])
          respond_to do |format|
         if @post.save
           format.html { redirect_to @post, notice: 'Post was successfully created.' }
           format.json { render json: @post, status: :created, location: @post }
         else
           format.html { render action: "new" }
           format.json { render json: @post.errors, status: :unprocessable_entity }
         end
      end
    end

а вот мой взгляд

        <%= form_for(@post) do |f| %>
          <% if @post.errors.any? %>
          <div id="error_explanation">
          <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from      being saved:</h2>

         <ul>
         <% @post.errors.full_messages.each do |msg| %>
         <li><%= msg %></li>
         <% end %>
         </ul>
        </div>
       <% end %>

      <div class="field">
       <%= f.label :description %><br />
       <%= f.text_area :description %>
      </div>
      <div class="field">
       <%= f.file_field :avatar %>
      </div>
        <div class="actions">
        <%= f.submit %>
      </div>
     <% end %>

person user2588480    schedule 03.09.2013    source источник
comment
вы нашли решение для этого   -  person r15    schedule 20.03.2014
comment
мы в одной лодке, вы нашли решение для этого?   -  person r15    schedule 25.03.2014


Ответы (2)


CarrierWave Backgrounder не выполняет начальную передачу файлов в фоновом режиме. Он может делать ровно две вещи:

process_in_background позволяет фоновой задаче выполнять «обработку», что Carrierwave называет шагом, на котором изменяется размер изображения, формат, создаются эскизы и выполняются другие пользовательские манипуляции. Исходное изображение по-прежнему «хранится» (описано ниже), как обычно.

store_in_background позволяет фоновой задаче обрабатывать «хранение», что Carrierwave называет шагом, на котором загруженное изображение перемещается в его окончательное место на локальном диске или на удаленном сервере, таком как S3, если вы используете туман.

Вы настроили свою модель на process_in_background, но ваш загрузчик не настроен на какую-либо обработку, поэтому, как и ожидалось, вы не наблюдаете никаких изменений. Если вы хотите, вы можете настроить свою модель также на store_in_background, но, поскольку вы используете локальное хранилище файлов (где копирование файлов обычно происходит довольно быстро), это также практически не повлияет на ваше приложение.

Дополнительные сведения об обработке и хранении см. в файле Carrierwave Readme.

person Taavo    schedule 03.09.2013
comment
Привет, Тааво, я действительно новичок в этом драгоценном камне, я много искал о process_in_background и store_in_background, но все еще путаюсь между ними. Нужно некоторое объяснение. - person user2588480; 05.09.2013
comment
Я попытался вдаваться в подробности. Это проясняет, что происходит? - person Taavo; 05.09.2013
comment
@Taavo Я пытаюсь сделать что-то подобное, но нашел мало документации для Carrwave_Backgrounder. Будет ли вышеизложенное также заботиться о сбое загрузки. например. где я могу указать фоновому оператору несущей волны повторить попытку через час, если она не удалась в первый раз. - person Rpant; 09.06.2017

Вместо этого я рекомендую вам использовать Carrierwave Direct.

person Brilliant-DucN    schedule 05.12.2017