delayed_job_ironmq 1.0.2 → 2.0.0.pre1
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/Gemfile.lock +36 -26
- data/README.md +38 -4
- data/delayed_job_ironmq.gemspec +2 -2
- data/lib/delayed/backend/actions.rb +15 -7
- data/lib/delayed/backend/iron_mq_config.rb +2 -1
- data/lib/delayed/backend/ironmq.rb +21 -8
- data/lib/delayed/backend/version.rb +1 -1
- data/lib/delayed/backend/worker.rb +6 -2
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6aa6fcf508e50c31a9d914116918d3cbc9c393d
|
4
|
+
data.tar.gz: 3ea4085dc5fcaf29c1386a6a2c198a4e9c19d899
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d3c01a86a3b1700d4d50be0bfdec61967a2c83bb0863091fa26409c32586e84e431e8a17172220c0d2afb895e405b5e80b85a5599d75237d234c7ff9e73f09e
|
7
|
+
data.tar.gz: e06b1b5e06c2addc0ae81c3c7c48c702fdfa6f16ad9e9acf8c22639a71974d7ee92dd1ecbbacd60457da3d0a116dad05589b916964eb62bf9b49d57c137d896f
|
data/Gemfile.lock
CHANGED
@@ -1,40 +1,50 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
delayed_job_ironmq (
|
5
|
-
delayed_job (
|
6
|
-
iron_mq (
|
4
|
+
delayed_job_ironmq (2.0.0.pre1)
|
5
|
+
delayed_job (~> 4.0.6)
|
6
|
+
iron_mq (= 6.0.0.pre1)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activesupport (
|
12
|
-
i18n (~> 0.
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
activesupport (4.2.0)
|
12
|
+
i18n (~> 0.7)
|
13
|
+
json (~> 1.7, >= 1.7.7)
|
14
|
+
minitest (~> 5.1)
|
15
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
16
|
+
tzinfo (~> 1.1)
|
17
|
+
delayed_job (4.0.6)
|
18
|
+
activesupport (>= 3.0, < 5.0)
|
16
19
|
diff-lcs (1.2.5)
|
17
|
-
i18n (0.
|
18
|
-
iron_core (1.0.
|
19
|
-
rest (>=
|
20
|
-
iron_mq (
|
20
|
+
i18n (0.7.0)
|
21
|
+
iron_core (1.0.7)
|
22
|
+
rest (>= 3.0.4)
|
23
|
+
iron_mq (6.0.0.pre1)
|
21
24
|
iron_core (>= 0.5.1)
|
22
|
-
|
25
|
+
json (1.8.2)
|
26
|
+
minitest (5.5.1)
|
23
27
|
net-http-persistent (2.9.4)
|
24
|
-
netrc (0.
|
25
|
-
rest (
|
28
|
+
netrc (0.10.3)
|
29
|
+
rest (3.0.6)
|
26
30
|
net-http-persistent (>= 2.9.1)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
rspec-
|
32
|
-
|
33
|
-
rspec-
|
34
|
-
rspec-
|
35
|
-
|
36
|
-
|
37
|
-
rspec-mocks (2.
|
31
|
+
netrc
|
32
|
+
rspec (3.2.0)
|
33
|
+
rspec-core (~> 3.2.0)
|
34
|
+
rspec-expectations (~> 3.2.0)
|
35
|
+
rspec-mocks (~> 3.2.0)
|
36
|
+
rspec-core (3.2.1)
|
37
|
+
rspec-support (~> 3.2.0)
|
38
|
+
rspec-expectations (3.2.0)
|
39
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
+
rspec-support (~> 3.2.0)
|
41
|
+
rspec-mocks (3.2.1)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.2.0)
|
44
|
+
rspec-support (3.2.2)
|
45
|
+
thread_safe (0.3.4)
|
46
|
+
tzinfo (1.2.2)
|
47
|
+
thread_safe (~> 0.1)
|
38
48
|
|
39
49
|
PLATFORMS
|
40
50
|
ruby
|
data/README.md
CHANGED
@@ -11,15 +11,26 @@ To start using delayed_job_ironmq, you need to sign up for Iron.io and setup you
|
|
11
11
|
|
12
12
|
1. Go to http://iron.io/ and sign up.
|
13
13
|
2. Get an Oauth Token at http://hud.iron.io/tokens
|
14
|
-
3. Add an iron.json file or setup environment variables for authentication. See http://dev.iron.io/
|
14
|
+
3. Add an iron.json file or setup environment variables for authentication. See http://dev.iron.io/mq/reference/configuration/ for details.
|
15
|
+
|
16
|
+
If you want to set the Host, Post, and Protocol specifically, simply include those keys in that project's iron.json file:
|
17
|
+
```json
|
18
|
+
{
|
19
|
+
"project_id": "PROJECT ID HERE",
|
20
|
+
"token": "YOUR TOKEN HERE"
|
21
|
+
"port": 443,
|
22
|
+
"protocol": "https",
|
23
|
+
"host":"mq-v3-aws-us-east-1.iron.io"
|
24
|
+
}
|
25
|
+
```
|
15
26
|
|
16
27
|
## Installation
|
17
28
|
|
18
29
|
Add the gems to your `Gemfile:`
|
19
30
|
|
20
31
|
```ruby
|
21
|
-
gem 'delayed_job'
|
22
|
-
gem 'delayed_job_ironmq'
|
32
|
+
gem 'delayed_job', '~> 4.0.6'
|
33
|
+
gem 'delayed_job_ironmq', '2.0.0.pre1'
|
23
34
|
```
|
24
35
|
|
25
36
|
Optionally: Add an initializer (`config/initializers/delayed_job.rb`):
|
@@ -32,8 +43,10 @@ Delayed::Worker.configure do |config|
|
|
32
43
|
config.delay = 0 # Time to wait before message will be available on the queue
|
33
44
|
config.timeout = 5.minutes # The time in seconds to wait after message is taken off the queue, before it is put back on. Delete before :timeout to ensure it does not go back on the queue.
|
34
45
|
config.expires_in = 7.days # After this time, message will be automatically removed from the queue.
|
46
|
+
config.error_queue = 'error_queue' # The failed jobs will be placed into the error queue
|
35
47
|
end
|
36
48
|
```
|
49
|
+
If you want to keep failed jobs, set `Delayed::Worker.destroy_failed_jobs = false`. The failed jobs will be placed into the error queue if failures exceed `Worker.max_attempts`.
|
37
50
|
|
38
51
|
## Usage
|
39
52
|
|
@@ -56,6 +69,27 @@ user = User.new
|
|
56
69
|
user.delay.background_stuff
|
57
70
|
```
|
58
71
|
|
72
|
+
Or declare a job using activejob like so:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
class MyJob < ActiveJob::Base
|
76
|
+
queue_as :default
|
77
|
+
def perform(*args)
|
78
|
+
puts "I run in the background"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
```
|
82
|
+
|
83
|
+
Then enqueue a job:
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
MyJob.perform_later record # Enqueue a job to be performed as soon the queueing system is free.
|
87
|
+
```
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
MyJob.set(wait: 1.week).perform_later(record) # Enqueue a job to be performed 1 week from now.
|
91
|
+
```
|
92
|
+
|
59
93
|
## Start worker process
|
60
94
|
|
61
95
|
rake jobs:work
|
@@ -64,7 +98,7 @@ That will start pulling jobs off the queue and processing them.
|
|
64
98
|
|
65
99
|
# Demo Rails Application
|
66
100
|
|
67
|
-
Here's a demo rails app you can clone and try it out: https://github.com/treeder/
|
101
|
+
Here's a demo rails app you can clone and try it out: https://github.com/treeder/delayed_job_ironmq_example
|
68
102
|
|
69
103
|
# Using with Heroku
|
70
104
|
|
data/delayed_job_ironmq.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.required_rubygems_version = ">= 1.3.6"
|
19
19
|
gem.required_ruby_version = Gem::Requirement.new(">= 1.8")
|
20
|
-
gem.add_runtime_dependency "iron_mq", "
|
21
|
-
gem.add_runtime_dependency "delayed_job", "
|
20
|
+
gem.add_runtime_dependency "iron_mq", "6.0.0.pre1"
|
21
|
+
gem.add_runtime_dependency "delayed_job", "~> 4.0.6"
|
22
22
|
|
23
23
|
gem.add_development_dependency "rspec"
|
24
24
|
end
|
@@ -31,22 +31,30 @@ module Delayed
|
|
31
31
|
|
32
32
|
def find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
|
33
33
|
Delayed::Worker.available_priorities.each do |priority|
|
34
|
-
message =
|
34
|
+
message = nil
|
35
|
+
begin
|
36
|
+
message = ironmq.queue(queue_name(priority)).get
|
37
|
+
rescue Exception => e
|
38
|
+
Delayed::Worker.logger.warn(e.message)
|
39
|
+
end
|
35
40
|
return [Delayed::Backend::Ironmq::Job.new(message)] if message
|
36
41
|
end
|
37
42
|
[]
|
38
43
|
end
|
39
44
|
|
40
45
|
def delete_all
|
41
|
-
deleted = 0
|
42
46
|
Delayed::Worker.available_priorities.each do |priority|
|
43
47
|
loop do
|
44
|
-
msgs =
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
msgs = nil
|
49
|
+
queue = queue_name(priority)
|
50
|
+
begin
|
51
|
+
msgs = ironmq.queue(queue).get(:n => 1000)
|
52
|
+
rescue Exception => e
|
53
|
+
Delayed::Worker.logger.warn(e.message)
|
49
54
|
end
|
55
|
+
|
56
|
+
break if msgs.blank?
|
57
|
+
ironmq.queue(queue).delete_reserved_messages(msgs)
|
50
58
|
end
|
51
59
|
end
|
52
60
|
end
|
@@ -27,16 +27,17 @@ module Delayed
|
|
27
27
|
data.symbolize_keys!
|
28
28
|
payload_obj = data.delete(:payload_object) || data.delete(:handler)
|
29
29
|
|
30
|
-
@queue_name
|
31
|
-
@delay
|
32
|
-
@timeout
|
33
|
-
@expires_in
|
34
|
-
@
|
30
|
+
@queue_name = data[:queue_name] || Delayed::Worker.queue_name
|
31
|
+
@delay = data[:delay] || Delayed::Worker.delay
|
32
|
+
@timeout = data[:timeout] || Delayed::Worker.timeout
|
33
|
+
@expires_in = data[:expires_in] || Delayed::Worker.expires_in
|
34
|
+
@error_queue = data[:error_queue] || Delayed::Worker.error_queue
|
35
|
+
@attributes = data
|
35
36
|
self.payload_object = payload_obj
|
36
37
|
end
|
37
38
|
|
38
39
|
def payload_object
|
39
|
-
@payload_object ||=
|
40
|
+
@payload_object ||= yaml_load
|
40
41
|
rescue TypeError, LoadError, NameError, ArgumentError => e
|
41
42
|
raise DeserializationError,
|
42
43
|
"Job failed to load: #{e.message}. Handler: #{handler.inspect}"
|
@@ -44,7 +45,7 @@ module Delayed
|
|
44
45
|
|
45
46
|
def payload_object=(object)
|
46
47
|
if object.is_a? String
|
47
|
-
@payload_object =
|
48
|
+
@payload_object = yaml_load(object)
|
48
49
|
self.handler = object
|
49
50
|
else
|
50
51
|
@payload_object = object
|
@@ -58,6 +59,10 @@ module Delayed
|
|
58
59
|
end
|
59
60
|
payload = JSON.dump(@attributes)
|
60
61
|
|
62
|
+
if run_at && run_at.utc >= self.class.db_time_now
|
63
|
+
@delay = (run_at.utc - self.class.db_time_now).round
|
64
|
+
end
|
65
|
+
|
61
66
|
@msg.delete if @msg
|
62
67
|
|
63
68
|
ironmq.queue(queue_name).post(payload,
|
@@ -78,8 +83,11 @@ module Delayed
|
|
78
83
|
end
|
79
84
|
|
80
85
|
def fail!
|
86
|
+
ironmq.queue(@error_queue).post(@msg.body,
|
87
|
+
:timeout => @timeout,
|
88
|
+
:delay => @delay,
|
89
|
+
:expires_in => @expires_in)
|
81
90
|
destroy
|
82
|
-
# v2: move to separate queue
|
83
91
|
end
|
84
92
|
|
85
93
|
def update_attributes(attributes)
|
@@ -116,6 +124,11 @@ module Delayed
|
|
116
124
|
def ironmq
|
117
125
|
::Delayed::Worker.ironmq
|
118
126
|
end
|
127
|
+
|
128
|
+
def yaml_load(object)
|
129
|
+
object ||= self.handler
|
130
|
+
YAML.respond_to?(:load_dj) ? YAML.load_dj(object) : YAML.load(object)
|
131
|
+
end
|
119
132
|
end
|
120
133
|
end
|
121
134
|
end
|
@@ -3,8 +3,8 @@ require_relative 'iron_mq_config'
|
|
3
3
|
module Delayed
|
4
4
|
class Worker
|
5
5
|
class << self
|
6
|
-
attr_accessor :config, :ironmq,
|
7
|
-
:
|
6
|
+
attr_accessor :config, :ironmq, :queue_name, :delay, :timeout, :expires_in,
|
7
|
+
:available_priorities, :error_queue, :logger
|
8
8
|
|
9
9
|
def configure
|
10
10
|
yield(config)
|
@@ -12,6 +12,7 @@ module Delayed
|
|
12
12
|
self.delay = config.delay || 0
|
13
13
|
self.timeout = config.timeout || 5.minutes
|
14
14
|
self.expires_in = config.expires_in || 7.days
|
15
|
+
self.error_queue = config.error_queue || 'error_queue'
|
15
16
|
|
16
17
|
priorities = config.available_priorities || [0]
|
17
18
|
if priorities.include?(0) && priorities.all? { |p| p.is_a?(Integer) }
|
@@ -19,6 +20,9 @@ module Delayed
|
|
19
20
|
else
|
20
21
|
raise ArgumentError, "available_priorities option has wrong format. Please provide array of Integer values, includes zero. Default is [0]."
|
21
22
|
end
|
23
|
+
|
24
|
+
self.logger = config.logger || Logger.new(STDOUT)
|
25
|
+
self.logger.level = Logger::WARN
|
22
26
|
end
|
23
27
|
|
24
28
|
def config
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_ironmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Shapiotko
|
@@ -9,48 +9,48 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-03-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: iron_mq
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - '
|
18
|
+
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 6.0.0.pre1
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - '
|
25
|
+
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 6.0.0.pre1
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: delayed_job
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 4.0.6
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 4.0.6
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
description: IronMQ backend for delayed_job
|
@@ -61,7 +61,7 @@ executables: []
|
|
61
61
|
extensions: []
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
|
-
- .gitignore
|
64
|
+
- ".gitignore"
|
65
65
|
- Gemfile
|
66
66
|
- Gemfile.lock
|
67
67
|
- LICENSE
|
@@ -86,17 +86,17 @@ require_paths:
|
|
86
86
|
- lib
|
87
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '1.8'
|
92
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.3.6
|
97
97
|
requirements: []
|
98
98
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.
|
99
|
+
rubygems_version: 2.4.6
|
100
100
|
signing_key:
|
101
101
|
specification_version: 4
|
102
102
|
summary: IronMQ backend for delayed_job
|