Backgrounding Libraries (original) (raw)
Shrine's backgrounding plugin requires you to define and call background jobs directly, which means you can integrate Shrine with any backgrounding library:
First you need to load the plugin:
Shrine.plugin :backgrounding
ActiveJob
Shrine::Attacher.promote_block do PromoteJob.perform_later(self.class.name, record, name, file_data) end Shrine::Attacher.destroy_block do DestroyJob.perform_later(self.class.name, data) end
class PromoteJob < ActiveJob::Base def perform(attacher_class, record, name, file_data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob < ActiveJob::Base def perform(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
Sidekiq
Shrine::Attacher.promote_block do PromoteJob.perform_async(self.class.name, record.class.name, record.id, name.to_s, file_data) end Shrine::Attacher.destroy_block do DestroyJob.perform_async(self.class.name, data) end
class PromoteJob include Sidekiq::Worker
def perform(attacher_class, record_class, record_id, name, file_data) attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob include Sidekiq::Worker
def perform(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
Resque
Shrine::Attacher.promote_block do Resque.enqueue(PromoteJob, self.class.name, record.class.name, record.id, name, file_data) end Shrine::Attacher.destroy_block do Resque.enqueue(DestroyJob, self.class.name, data) end
class PromoteJob def self.perform(attacher_class, record_class, record_id, name, file_data) attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob def self.perform(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
SuckerPunch
Shrine::Attacher.promote_block do PromoteJob.perform_async(self.class.name, record.class.name, record.id, name, file_data) end Shrine::Attacher.destroy_block do DestroyJob.perform_async(self.class.name, data) end
class PromoteJob include SuckerPunch::Job
def perform(attacher_class, record_class, record_id, name, file_data) attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob include SuckerPunch::Job
def perform(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
QueueClassic
Shrine::Attacher.promote_block do QC.enqueue("PromoteJob.perform", self.class.name, record.class.name, record.id, name, file_data) end Shrine::Attacher.destroy_block do QC.enqueue("DestroyJob.perform", self.class.name, data) end
class PromoteJob def self.perform(attacher_class, record_class, record_id, name, file_data) attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob def self.perform(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
RocketJob
Shrine::Attacher.promote_block do PromoteJob.create!( attacher_class: self.class.name, record_class: record.class.name, record_id: record.id, name: name, file_data: file_data, ) end Shrine::Attacher.destroy_block do DestroyJob.create!( attacher_class: self.class.name, data: data, ) end
class PromoteJob < RocketJob::Job field :attacher_class, type: String field :record_class, type: String field :record_id, type: String field :name, type: String filed :file_data, type: Hash
def perform attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob < RocketJob::Job field :attacher_class, type: String field :data, type: Hash
def perform attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
Que
Shrine::Attacher.promote_block do PromoteJob.enqueue(self.class.name record.class.name, record.id, name, file_data) end Shrine::Attacher.destroy_block do DestroyJob.enqueue(self.class.name, data) end
class PromoteJob < Que::Job def run(attacher_class, record_class, record_id, name, file_data) attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob < Que::Job def run(attacher_class, data) attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end
Qu
Shrine::Attacher.promote_block do PromoteJob.create(self.class.name, record.class.name, record.id, name, file_data) end Shrine::Attacher.destroy_block do DestroyJob.create(self.class.name, data) end
class PromoteJob < Qu::Job extend Dry::Initializer # dry-initializer gem
param :attacher_class param :record_class param :record_id param :name param :file_data
def perform attacher_class = Object.const_get(attacher_class) record = Object.const_get(record_class).find(record_id)
attacher = attacher_class.retrieve(model: record, name: name, file: file_data)
attacher.atomic_promote
end end
class DestroyJob < Qu::Job extend Dry::Initializer # dry-initializer gem
param :attacher_class param :data
def perform attacher_class = Object.const_get(attacher_class)
attacher = attacher_class.from_data(data)
attacher.destroy
end end