Commit 3acc4a9c
Changed files (3)
app
models
uploaders
lib
carrier_wave
app/models/photo.rb
@@ -2,4 +2,6 @@ class Photo < ActiveRecord::Base
belongs_to :creation
validates :image, :presence => true
mount_uploader :image, PhotoUploader
+
+ after_save :enqueue
end
app/uploaders/photo_uploader.rb
@@ -1,6 +1,8 @@
# encoding: utf-8
+require File.join(Rails.root, "lib", "carrier_wave", "delayed_job")
class PhotoUploader < CarrierWave::Uploader::Base
+ include CarrierWave::Delayed::Job
include CarrierWave::RMagick
include CarrierWave::MimeTypes
lib/carrier_wave/delayed_job.rb
@@ -0,0 +1,46 @@
+module CarrierWave
+ module Delayed
+ module Job
+ module ActiveRecordInterface
+ def delay_carrierwave
+ @delay_carrierwave ||= true
+ end
+
+ def delay_carrierwave=(delay)
+ @delay_carrierwave = delay
+ end
+
+ def perform
+ asset_name = self.class.uploader_options.keys.first
+ self.send(asset_name).versions.each_pair do |key, value|
+ value.process_without_delay!
+ end
+ end
+
+ private
+
+ def enqueue
+ ::Delayed::Job.enqueue self
+ end
+ end
+
+ def self.included(base)
+ base.extend ClassMethods
+ end
+
+ module ClassMethods
+ def self.extended(base)
+ base.send(:include, InstanceMethods)
+ base.alias_method_chain :process!, :delay
+ ::ActiveRecord::Base.send(:include, CarrierWave::Delayed::Job::ActiveRecordInterface)
+ end
+
+ module InstanceMethods
+ def process_with_delay!(new_file)
+ process_without_delay!(new_file) unless model.delay_carrierwave
+ end
+ end
+ end
+ end
+ end
+end