2015-12-03 3 views
0

У меня есть задача грабли для преобразования моих фотографий с attachment_fu в Carrierwave.Многозадачное преобразование из attachment_fu в Carrierwave

Есть ли способ запустить задачу :convert несколько раз параллельно, чтобы сделать это быстрее?

Вот моя рабочая задача:

namespace :photos do 
    task :convert => :environment do 
    Item.all.each do |item| 
     item.photos.each do |photo| 
     new_photo = ItemPhoto.new :photo => File.open(File.join(Rails.root, "public", photo.public_filename)), 
            :item_id => item.id 

     new_photo.save 
     end 
     item.update_attribute :migrated, true 
    end  
    end 
end 

ответ

0

Посмотрите на parallel драгоценный камень

Это может выглядеть следующим образом для 8 параллельных процессов:

namespace :photos do 
    task :convert => :environment do 
    Parallel.each(Item.all, :in_processes => 8) do |item| 
     item.photos.each do |photo| 
      new_photo = ItemPhoto.new :photo => File.open(File.join(Rails.root, "public", photo.public_filename)), 
           :item_id => item.id 

      new_photo.save 
     end 
     item.update_attribute :migrated, true 
    end 
    end 
end 

`

+0

Спасибо , это работало точно так, как предполагалось –