carrierwave_backgrounder 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +8 -2
- data/CHANGELOG.md +6 -0
- data/README.md +36 -2
- data/carrierwave_backgrounder.gemspec +2 -2
- data/lib/backgrounder/orm/base.rb +1 -1
- data/lib/backgrounder/orm/data_mapper.rb +1 -1
- data/lib/backgrounder/support/backends.rb +5 -1
- data/lib/backgrounder/version.rb +1 -1
- data/lib/backgrounder/workers/base.rb +15 -7
- data/lib/backgrounder/workers/class_methods.rb +14 -0
- data/lib/backgrounder/workers/process_asset.rb +2 -13
- data/lib/backgrounder/workers/process_asset_mixin.rb +28 -0
- data/lib/backgrounder/workers/store_asset.rb +2 -26
- data/lib/backgrounder/workers/store_asset_mixin.rb +43 -0
- data/lib/backgrounder/workers.rb +3 -0
- data/lib/generators/carrierwave_backgrounder/templates/config/initializers/carrierwave_backgrounder.rb +1 -0
- data/spec/backgrounder/support/backends_spec.rb +13 -3
- metadata +20 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c08d7bdb01034545507f0ef13305aa12764e2771148c4ddc22f1291fbba8f7f9
|
4
|
+
data.tar.gz: 21d4f4a1cd200c5b05f9b967d4fda436e7d11752ba6fb6307f619a7b32ae1924
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 683938ec5318b2727ae40e177a717fc6135f479f397cbdd39e0b3639a70ff3508ef98406ced8fd203b6d34d4017a84d2a2eab64f164d69bd8d24c64e2ff1786c
|
7
|
+
data.tar.gz: 44b9e651e679fa450dfbe9620e58e5472c0be9bc20bd7f4ce29894de28c30c7f6d5c04f7dd9aa56fc4277bd8d0a3ff0205aa287fb31439e8bfaa5d6158ccbe0b
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
[](http://travis-ci.org/lardawge/carrierwave_backgrounder)
|
4
4
|
[](https://codeclimate.com/github/lardawge/carrierwave_backgrounder)
|
5
|
-
[](http://stillmaintained.com/lardawge/carrierwave_backgrounder)
|
6
5
|
|
7
6
|
I like CarrierWave. That being said, I don't like tying up app instances waiting for images to process.
|
8
7
|
|
@@ -55,6 +54,14 @@ CarrierWave::Backgrounder.configure do |c|
|
|
55
54
|
end
|
56
55
|
```
|
57
56
|
|
57
|
+
**IMPORTANT FOR SIDEKIQ BACKEND** - Custom queue should be defined inside the Sidekiq configuration otherwise jobs won't be processed:
|
58
|
+
|
59
|
+
```yml
|
60
|
+
:queues:
|
61
|
+
- [awesome_queue, 1]
|
62
|
+
- default
|
63
|
+
```
|
64
|
+
|
58
65
|
In your CarrierWave uploader file:
|
59
66
|
|
60
67
|
```ruby
|
@@ -135,9 +142,36 @@ class MyParanoidWorker < ::CarrierWave::Workers::ProcessAsset
|
|
135
142
|
# other hooks you might care about
|
136
143
|
end
|
137
144
|
```
|
145
|
+
|
146
|
+
### ActiveJob
|
147
|
+
Use overriden worker that inherits from ActiveJob::Base and includes relevant worker mixin:
|
148
|
+
```ruby
|
149
|
+
class MyActiveJobWorker < ActiveJob::Base
|
150
|
+
include ::CarrierWave::Workers::ProcessAssetMixin
|
151
|
+
# ... or include ::CarrierWave::Workers::StoreAssetMixin
|
152
|
+
|
153
|
+
after_perform do
|
154
|
+
# your code here
|
155
|
+
end
|
156
|
+
|
157
|
+
# Sometimes job gets performed before the file is uploaded and ready.
|
158
|
+
# You can define how to handle that case by overriding `when_not_ready` method
|
159
|
+
# (by default it does nothing)
|
160
|
+
def when_not_ready
|
161
|
+
retry_job
|
162
|
+
end
|
163
|
+
end
|
164
|
+
```
|
165
|
+
Don't forget to set `active_job` as a backend in the config:
|
166
|
+
```ruby
|
167
|
+
CarrierWave::Backgrounder.configure do |c|
|
168
|
+
c.backend :active_job, queue: :carrierwave
|
169
|
+
end
|
170
|
+
```
|
171
|
+
|
138
172
|
### Testing with Rspec
|
139
173
|
We use the after_commit hook when using active_record. This creates a problem when testing with Rspec because after_commit never gets fired
|
140
|
-
if you're using
|
174
|
+
if you're using transactional fixtures. One solution to the problem is to use the [TestAfterCommit gem](https://github.com/grosser/test_after_commit).
|
141
175
|
There are various other solutions in which case google is your friend.
|
142
176
|
|
143
177
|
### Uploaders mounted on mongoid embedded documents
|
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
s.add_dependency "carrierwave", ["
|
20
|
+
s.add_dependency "carrierwave", [">= 0.5", "< 2.2"]
|
21
21
|
|
22
|
-
s.add_development_dependency "rspec", ["~> 3.
|
22
|
+
s.add_development_dependency "rspec", ["~> 3.10.0"]
|
23
23
|
s.add_development_dependency "rake"
|
24
24
|
end
|
@@ -82,7 +82,7 @@ module CarrierWave
|
|
82
82
|
|
83
83
|
def write_#{column}_identifier
|
84
84
|
super and return if process_#{column}_upload
|
85
|
-
self.#{column}_tmp =
|
85
|
+
self.#{column}_tmp = #{column}_cache if #{column}_cache
|
86
86
|
end
|
87
87
|
|
88
88
|
def store_#{column}!
|
@@ -22,6 +22,10 @@ module CarrierWave
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
+
def enqueue_active_job(worker, *args)
|
26
|
+
worker.perform_later(*args.map(&:to_s))
|
27
|
+
end
|
28
|
+
|
25
29
|
def enqueue_delayed_job(worker, *args)
|
26
30
|
worker_args = {}
|
27
31
|
if ::Delayed::Job.new.respond_to?(:queue)
|
@@ -44,7 +48,7 @@ module CarrierWave
|
|
44
48
|
|
45
49
|
def enqueue_sidekiq(worker, *args)
|
46
50
|
override_queue_name = worker.sidekiq_options['queue'] == 'default' || worker.sidekiq_options['queue'].nil?
|
47
|
-
args = sidekiq_queue_options(override_queue_name, 'class' => worker, 'args' => args)
|
51
|
+
args = sidekiq_queue_options(override_queue_name, 'class' => worker, 'args' => args.map(&:to_s))
|
48
52
|
worker.client_push(args)
|
49
53
|
end
|
50
54
|
|
data/lib/backgrounder/version.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module CarrierWave
|
2
3
|
module Workers
|
3
|
-
class Base < Struct.new(:klass, :id, :column)
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
module Base
|
6
|
+
attr_accessor :klass, :id, :column, :record
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
super(*args) unless self.class.superclass == Object
|
10
|
+
set_args(*args) if args.present?
|
7
11
|
end
|
8
12
|
|
9
13
|
def perform(*args)
|
10
14
|
set_args(*args) if args.present?
|
11
|
-
constantized_resource.find id
|
15
|
+
self.record = constantized_resource.find id
|
12
16
|
rescue *not_found_errors
|
13
17
|
end
|
14
18
|
|
@@ -29,6 +33,10 @@ module CarrierWave
|
|
29
33
|
klass.is_a?(String) ? klass.constantize : klass
|
30
34
|
end
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
|
36
|
+
def when_not_ready
|
37
|
+
end
|
38
|
+
|
39
|
+
end # Base
|
40
|
+
|
41
|
+
end # Workers
|
42
|
+
end # CarrierWave
|
@@ -2,19 +2,8 @@
|
|
2
2
|
module CarrierWave
|
3
3
|
module Workers
|
4
4
|
|
5
|
-
class ProcessAsset
|
6
|
-
|
7
|
-
def perform(*args)
|
8
|
-
record = super(*args)
|
9
|
-
|
10
|
-
if record && record.send(:"#{column}").present?
|
11
|
-
record.send(:"process_#{column}_upload=", true)
|
12
|
-
if record.send(:"#{column}").recreate_versions! && record.respond_to?(:"#{column}_processing")
|
13
|
-
record.update_attribute :"#{column}_processing", false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
5
|
+
class ProcessAsset
|
6
|
+
include CarrierWave::Workers::ProcessAssetMixin
|
18
7
|
end # ProcessAsset
|
19
8
|
|
20
9
|
end # Workers
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module CarrierWave
|
3
|
+
module Workers
|
4
|
+
|
5
|
+
module ProcessAssetMixin
|
6
|
+
include CarrierWave::Workers::Base
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.extend CarrierWave::Workers::ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform(*args)
|
13
|
+
record = super(*args)
|
14
|
+
|
15
|
+
if record && record.send(:"#{column}").present?
|
16
|
+
record.send(:"process_#{column}_upload=", true)
|
17
|
+
if record.send(:"#{column}").recreate_versions! && record.respond_to?(:"#{column}_processing")
|
18
|
+
record.update_attribute :"#{column}_processing", false
|
19
|
+
end
|
20
|
+
else
|
21
|
+
when_not_ready
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end # ProcessAssetMixin
|
26
|
+
|
27
|
+
end # Workers
|
28
|
+
end # Backgrounder
|
@@ -2,32 +2,8 @@
|
|
2
2
|
module CarrierWave
|
3
3
|
module Workers
|
4
4
|
|
5
|
-
class StoreAsset
|
6
|
-
|
7
|
-
|
8
|
-
def perform(*args)
|
9
|
-
record = super(*args)
|
10
|
-
|
11
|
-
if record && record.send(:"#{column}_tmp")
|
12
|
-
store_directories(record)
|
13
|
-
record.send :"process_#{column}_upload=", true
|
14
|
-
record.send :"#{column}_tmp=", nil
|
15
|
-
record.send :"#{column}_processing=", false if record.respond_to?(:"#{column}_processing")
|
16
|
-
File.open(cache_path) { |f| record.send :"#{column}=", f }
|
17
|
-
if record.save!
|
18
|
-
FileUtils.rm_r(tmp_directory, :force => true)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def store_directories(record)
|
26
|
-
asset, asset_tmp = record.send(:"#{column}"), record.send(:"#{column}_tmp")
|
27
|
-
cache_directory = File.expand_path(asset.cache_dir, asset.root)
|
28
|
-
@cache_path = File.join(cache_directory, asset_tmp)
|
29
|
-
@tmp_directory = File.join(cache_directory, asset_tmp.split("/").first)
|
30
|
-
end
|
5
|
+
class StoreAsset
|
6
|
+
include CarrierWave::Workers::StoreAssetMixin
|
31
7
|
end # StoreAsset
|
32
8
|
|
33
9
|
end # Workers
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module CarrierWave
|
3
|
+
module Workers
|
4
|
+
|
5
|
+
module StoreAssetMixin
|
6
|
+
include CarrierWave::Workers::Base
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.extend CarrierWave::Workers::ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :cache_path, :tmp_directory
|
13
|
+
|
14
|
+
def perform(*args)
|
15
|
+
record = super(*args)
|
16
|
+
|
17
|
+
if record && record.send(:"#{column}_tmp")
|
18
|
+
store_directories(record)
|
19
|
+
record.send :"process_#{column}_upload=", true
|
20
|
+
record.send :"#{column}_tmp=", nil
|
21
|
+
record.send :"#{column}_processing=", false if record.respond_to?(:"#{column}_processing")
|
22
|
+
File.open(cache_path) { |f| record.send :"#{column}=", f }
|
23
|
+
if record.save!
|
24
|
+
FileUtils.rm_r(tmp_directory, :force => true)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
when_not_ready
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def store_directories(record)
|
34
|
+
asset, asset_tmp = record.send(:"#{column}"), record.send(:"#{column}_tmp")
|
35
|
+
cache_directory = File.expand_path(asset.cache_dir, asset.root)
|
36
|
+
@cache_path = File.join(cache_directory, asset_tmp)
|
37
|
+
@tmp_directory = File.join(cache_directory, asset_tmp.split("/").first)
|
38
|
+
end
|
39
|
+
|
40
|
+
end # StoreAssetMixin
|
41
|
+
|
42
|
+
end # Workers
|
43
|
+
end # Backgrounder
|
data/lib/backgrounder/workers.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
1
|
require 'backgrounder/workers/base'
|
2
|
+
require 'backgrounder/workers/class_methods'
|
3
|
+
require 'backgrounder/workers/process_asset_mixin'
|
4
|
+
require 'backgrounder/workers/store_asset_mixin'
|
2
5
|
require 'backgrounder/workers/process_asset'
|
3
6
|
require 'backgrounder/workers/store_asset'
|
@@ -1,5 +1,6 @@
|
|
1
1
|
CarrierWave::Backgrounder.configure do |c|
|
2
2
|
c.backend :delayed_job, queue: :carrierwave
|
3
|
+
# c.backend :active_job, queue: :carrierwave
|
3
4
|
# c.backend :resque, queue: :carrierwave
|
4
5
|
# c.backend :sidekiq, queue: :carrierwave
|
5
6
|
# c.backend :girl_friday, queue: :carrierwave
|
@@ -31,6 +31,16 @@ module CarrierWave::Backgrounder
|
|
31
31
|
describe '#enqueue_for_backend' do
|
32
32
|
let!(:worker) { MockWorker.new('FakeClass', 1, :image) }
|
33
33
|
|
34
|
+
context 'active_job' do
|
35
|
+
let(:args) { ['FakeClass', 1, :image] }
|
36
|
+
|
37
|
+
it 'invokes perform_later with string arguments' do
|
38
|
+
expect(MockWorker).to receive(:perform_later).with('FakeClass', '1', 'image')
|
39
|
+
mock_module.backend :active_job
|
40
|
+
mock_module.enqueue_for_backend(MockWorker, *args)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
34
44
|
context 'delayed_job' do
|
35
45
|
before do
|
36
46
|
@mock_worker = Class.new do
|
@@ -112,7 +122,7 @@ module CarrierWave::Backgrounder
|
|
112
122
|
let(:args) { ['FakeClass', 1, :image] }
|
113
123
|
|
114
124
|
it 'invokes client_push on the class with passed args' do
|
115
|
-
expect(MockSidekiqWorker).to receive(:client_push).with({ 'class' => MockSidekiqWorker, 'args' => args })
|
125
|
+
expect(MockSidekiqWorker).to receive(:client_push).with({ 'class' => MockSidekiqWorker, 'args' => args.map(&:to_s) })
|
116
126
|
mock_module.backend :sidekiq
|
117
127
|
mock_module.enqueue_for_backend(MockSidekiqWorker, *args)
|
118
128
|
end
|
@@ -122,7 +132,7 @@ module CarrierWave::Backgrounder
|
|
122
132
|
'retry' => false,
|
123
133
|
'timeout' => 60,
|
124
134
|
'queue' => :awesome_queue,
|
125
|
-
'args' => args })
|
135
|
+
'args' => args.map(&:to_s) })
|
126
136
|
options = {:retry => false, :timeout => 60, :queue => :awesome_queue}
|
127
137
|
mock_module.backend :sidekiq, options
|
128
138
|
mock_module.enqueue_for_backend(MockSidekiqWorker, *args)
|
@@ -132,7 +142,7 @@ module CarrierWave::Backgrounder
|
|
132
142
|
expect(MockNamedSidekiqWorker).to receive(:client_push).with({ 'class' => MockNamedSidekiqWorker,
|
133
143
|
'retry' => false,
|
134
144
|
'timeout' => 60,
|
135
|
-
'args' => args })
|
145
|
+
'args' => args.map(&:to_s) })
|
136
146
|
options = {:retry => false, :timeout => 60}
|
137
147
|
mock_module.backend :sidekiq, options
|
138
148
|
mock_module.enqueue_for_backend(MockNamedSidekiqWorker, *args)
|
metadata
CHANGED
@@ -1,43 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrierwave_backgrounder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Larry Sprock
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: carrierwave
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.5'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.2'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0.5'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.2'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rspec
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
39
|
+
version: 3.10.0
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
44
|
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.
|
46
|
+
version: 3.10.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: rake
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,7 +58,7 @@ dependencies:
|
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
55
|
-
description:
|
61
|
+
description:
|
56
62
|
email:
|
57
63
|
- larry@lucidbleu.com
|
58
64
|
executables: []
|
@@ -76,8 +82,11 @@ files:
|
|
76
82
|
- lib/backgrounder/version.rb
|
77
83
|
- lib/backgrounder/workers.rb
|
78
84
|
- lib/backgrounder/workers/base.rb
|
85
|
+
- lib/backgrounder/workers/class_methods.rb
|
79
86
|
- lib/backgrounder/workers/process_asset.rb
|
87
|
+
- lib/backgrounder/workers/process_asset_mixin.rb
|
80
88
|
- lib/backgrounder/workers/store_asset.rb
|
89
|
+
- lib/backgrounder/workers/store_asset_mixin.rb
|
81
90
|
- lib/carrierwave_backgrounder.rb
|
82
91
|
- lib/generators/carrierwave_backgrounder/USAGE
|
83
92
|
- lib/generators/carrierwave_backgrounder/install_generator.rb
|
@@ -95,7 +104,7 @@ homepage: https://github.com/lardawge/carrierwave_backgrounder
|
|
95
104
|
licenses:
|
96
105
|
- MIT
|
97
106
|
metadata: {}
|
98
|
-
post_install_message:
|
107
|
+
post_install_message:
|
99
108
|
rdoc_options: []
|
100
109
|
require_paths:
|
101
110
|
- lib
|
@@ -110,9 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
119
|
- !ruby/object:Gem::Version
|
111
120
|
version: '0'
|
112
121
|
requirements: []
|
113
|
-
|
114
|
-
|
115
|
-
signing_key:
|
122
|
+
rubygems_version: 3.1.6
|
123
|
+
signing_key:
|
116
124
|
specification_version: 4
|
117
125
|
summary: Offload CarrierWave's image processing and storage to a background process
|
118
126
|
using Delayed Job, Resque, Sidekiq, Qu, Queue Classic or Girl Friday
|