activejob_disque_adapter 0.0.2 → 0.0.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 +4 -4
- data/README.md +66 -0
- data/activejob_disque_adapter.gemspec +2 -1
- data/lib/active_job/queue_adapters/disque_adapter.rb +4 -3
- data/lib/activejob_disque_adapter.rb +8 -0
- data/lib/{active_job/disque_worker.rb → disque/active_job_worker.rb} +18 -10
- data/lib/disque/tasks/work.rake +9 -0
- metadata +20 -5
- data/lib/active_job.rb +0 -6
- data/lib/active_job/queue_adapters.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2352c90c6cef05344971d8a1e0eb428f4a2d51e2
|
4
|
+
data.tar.gz: b3f180d5e6ee0306d1877bd0f976df34950d6d00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efdc2b46c01b8869665704fe1e5fa367a88837227fd7bdaf74bc119825226f5915f91bc86bf7c71b82961a8735046527a5d8123e6833afbe6ba5a5f8baa5e2f2
|
7
|
+
data.tar.gz: 819e1e9b9e3e77397fa5aa4f58b2e6f0a99eb102fb5848a65fe8d17bae76f3b354b780f20b88e4083838654d99ae26659fec1b8993872f3b331130910f6b946f
|
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
## Rails <3 Disque
|
2
|
+
|
3
|
+
This gem provides a simple way to use [antirez](http://antirez.com/)'s [Disque](https://github.com/antirez/disque) as a backend for your Rails [ActiveJob](http://edgeguides.rubyonrails.org/active_job_basics.html) workers.
|
4
|
+
|
5
|
+
|
6
|
+
### Installation and Setup
|
7
|
+
|
8
|
+
Add this gem to your Gemfile.
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'rails', '4.2.3'
|
12
|
+
gem 'activejob_disque_adapter'
|
13
|
+
```
|
14
|
+
|
15
|
+
And set your Rails application to use it in `config/application.rb` (or `config/environments/*`, depending on your preference)
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
module YourApp
|
19
|
+
class Application < Rails::Application
|
20
|
+
config.active_job.queue_adapter = :disque
|
21
|
+
end
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
That's all you need! You can then go on to write standard ActiveJob classes, which will be enqueued to Disque when you call `#perform_later` on them.
|
26
|
+
|
27
|
+
|
28
|
+
## Running your jobs
|
29
|
+
|
30
|
+
This gem also includes a handy class called `Disque::ActiveJobWorker` and a rake task that leverages it. In order to run your jobs you can simply call `rake disque:work` from your Procfile, like so:
|
31
|
+
|
32
|
+
```Procfile
|
33
|
+
disque_high: DISQUE_QUEUES=urgent rake disque:work
|
34
|
+
disque_all: DISQUE_QUEUES=urgent,medium,low rake disque:work
|
35
|
+
```
|
36
|
+
|
37
|
+
## Configuration
|
38
|
+
|
39
|
+
You can configure the Disque adapter and Worker programatically or via environment variables, this is the list of configurable parameters:
|
40
|
+
|
41
|
+
| Parameter | ENV Variable | Default Value | Description
|
42
|
+
|:---------:|:---------------:|:-----------------|:-----------:|
|
43
|
+
| Nodes | DISQUE_NODES | 'localhost:7711' | This is the list of Disque servers to connect to, it can be a single node, a list of comma-separated nodes or an array of nodes (when done programatically) |
|
44
|
+
| Auth | DISQUE_AUTH | '' | Authorization credentials for Disque. |
|
45
|
+
| Timeout | DISQUE_TIMEOUT | '100' | Time in milliseconds that the client will wait for the Disque server to acknowledge and replicate a job |
|
46
|
+
| Cycle | DISQUE_CYCLE | '1000' | The client keeps track of which nodes are providing more jobs, after the amount of operations specified in cycle it tries to connect to the preferred node. |
|
47
|
+
| Queues | DISQUE_QUEUES | 'default' | The list of queues that `Disque::ActiveJobWorker` will listen to, it can be a single queue name, a list of comma-separated queues or an array of queue names (when done programatically) |
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
#### Environment Variables
|
52
|
+
|
53
|
+
```.env
|
54
|
+
DISQUE_QUEUES="urgent,medium,low"
|
55
|
+
DISQUE_NODES="localhost:7711,localhost:8822"
|
56
|
+
DISQUE_TIMEOUT=200
|
57
|
+
```
|
58
|
+
|
59
|
+
#### Programatically
|
60
|
+
|
61
|
+
```Ruby
|
62
|
+
# Keep in mind #run is a blocking action, it will loop through the queues finding jobs to execute.
|
63
|
+
Disque::ActiveJobWorker.new(
|
64
|
+
queues: %w(urgent medium)
|
65
|
+
).run
|
66
|
+
```
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "activejob_disque_adapter"
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.3"
|
4
4
|
s.summary = "ActiveJob adapter for Disque backends"
|
5
5
|
s.description = "Fills the gap between ActiveJob and Disque"
|
6
6
|
s.authors = ["pote"]
|
@@ -11,5 +11,6 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = `git ls-files`.split("\n")
|
12
12
|
|
13
13
|
s.add_dependency "disque"
|
14
|
+
s.add_dependency "activesupport"
|
14
15
|
s.add_development_dependency "cutest"
|
15
16
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'disque'
|
2
|
+
require 'active_support/json'
|
2
3
|
|
3
4
|
module ActiveJob
|
4
5
|
module QueueAdapters
|
@@ -6,7 +7,7 @@ module ActiveJob
|
|
6
7
|
def self.enqueue(job)
|
7
8
|
client.push(
|
8
9
|
job.queue_name,
|
9
|
-
job.serialize,
|
10
|
+
ActiveSupport::JSON.encode(job.serialize),
|
10
11
|
@disque_timeout
|
11
12
|
)
|
12
13
|
end
|
@@ -14,7 +15,7 @@ module ActiveJob
|
|
14
15
|
def self.enqueue_at(job, timestamp)
|
15
16
|
client.push(
|
16
17
|
job.queue_name,
|
17
|
-
job.serialize,
|
18
|
+
ActiveSupport::JSON.encode(job.serialize),
|
18
19
|
@disque_timeout,
|
19
20
|
delay: timestamp.to_i - Time.now.to_i
|
20
21
|
)
|
@@ -26,7 +27,7 @@ module ActiveJob
|
|
26
27
|
@disque_client ||= client || Disque.new(
|
27
28
|
ENV.fetch('DISQUE_NODES', 'localhost:7711'),
|
28
29
|
auth: ENV.fetch('DISQUE_AUTH', nil),
|
29
|
-
cycle: ENV.fetch('DISQUE_CYCLE', '
|
30
|
+
cycle: ENV.fetch('DISQUE_CYCLE', '1000').to_i
|
30
31
|
)
|
31
32
|
end
|
32
33
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
require 'activesupport'
|
2
1
|
require 'disque'
|
3
|
-
require 'json'
|
2
|
+
require 'active_support/json'
|
4
3
|
|
5
|
-
|
6
|
-
class
|
4
|
+
class Disque
|
5
|
+
class ActiveJobWorker
|
7
6
|
attr_reader :disque_client,
|
8
7
|
:disque_queues,
|
9
8
|
:disque_timeout,
|
@@ -20,7 +19,18 @@ module ActiveJob
|
|
20
19
|
cycle: ENV.fetch('DISQUE_CYCLE', '20000').to_i
|
21
20
|
)
|
22
21
|
|
23
|
-
@disque_queues =
|
22
|
+
@disque_queues = case
|
23
|
+
when queues.is_a?(Array)
|
24
|
+
queues
|
25
|
+
when queues.is_a?(String)
|
26
|
+
queues.split(',')
|
27
|
+
when queues.nil?
|
28
|
+
ENV.fetch('DISQUE_QUEUES', 'default').split(',')
|
29
|
+
else
|
30
|
+
raise 'Invalid Disque Queues'
|
31
|
+
end
|
32
|
+
|
33
|
+
|
24
34
|
@disque_count = count
|
25
35
|
@disque_timeout = timeout
|
26
36
|
|
@@ -34,11 +44,9 @@ module ActiveJob
|
|
34
44
|
timeout: disque_timeout,
|
35
45
|
count: disque_count
|
36
46
|
) do |serialized_job, _|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
klass.new(job.fetch('arguments')).perform_now
|
41
|
-
puts "Done"
|
47
|
+
ActiveJob::Base.deserialize(
|
48
|
+
ActiveSupport::JSON.decode(serialized_job)
|
49
|
+
).perform_now
|
42
50
|
end
|
43
51
|
end
|
44
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activejob_disque_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pote
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: disque
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: cutest
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,11 +60,12 @@ extensions: []
|
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- ".gitignore"
|
63
|
+
- README.md
|
49
64
|
- activejob_disque_adapter.gemspec
|
50
|
-
- lib/active_job.rb
|
51
|
-
- lib/active_job/disque_worker.rb
|
52
|
-
- lib/active_job/queue_adapters.rb
|
53
65
|
- lib/active_job/queue_adapters/disque_adapter.rb
|
66
|
+
- lib/activejob_disque_adapter.rb
|
67
|
+
- lib/disque/active_job_worker.rb
|
68
|
+
- lib/disque/tasks/work.rake
|
54
69
|
homepage: https://github.com/pote/activejob_disque_adapter
|
55
70
|
licenses:
|
56
71
|
- MIT
|
data/lib/active_job.rb
DELETED