active_elastic_job 2.0.1 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/active-elastic-job.gemspec +19 -6
- data/lib/active_elastic_job/rack/sqs_message_consumer.rb +24 -5
- data/lib/active_elastic_job/railtie.rb +5 -2
- data/lib/active_elastic_job/version.rb +3 -3
- data/lib/active_elastic_job.rb +1 -1
- data/lib/active_job/queue_adapters/active_elastic_job_adapter.rb +57 -24
- metadata +189 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 13d1e6ed87dd9769df952fb0017b638febe10bbb414263b71a6b0caf3dfc2b52
|
4
|
+
data.tar.gz: 69fd12721bd019bc46ec105c35de482f914f82fee1bcf22d18df44f3985ca9db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f34c118939fb99f8826ea1f2b6e6cb7c4407e23d5ecce2162563d4a9f36978a578e2f9fc72fd50d98e453adb6689ca68c2b3f01d37374d081a4a93ca6a66718e
|
7
|
+
data.tar.gz: d2c2ee1810263d6504b8ab774dbacb6a4be44a789f624577ca79097d8989fd0a0f74b96bc0ad7b655ed88b8903c3a8d81b1c5eae0cb16343d8d1995b15186c98
|
data/active-elastic-job.gemspec
CHANGED
@@ -8,20 +8,33 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.platform = Gem::Platform::RUBY
|
9
9
|
spec.name = 'active_elastic_job'
|
10
10
|
spec.version = ActiveElasticJob.version
|
11
|
-
spec.authors = ['Tawan Sierek']
|
12
|
-
spec.email = ['tawan@sierek.com']
|
11
|
+
spec.authors = ['Tawan Sierek', 'Joey Paris']
|
12
|
+
spec.email = ['tawan@sierek.com', 'mail@joeyparis.me']
|
13
13
|
spec.summary = 'Active Elastic Job is a simple to use Active Job backend for Rails applications deployed on the Amazon Elastic Beanstalk platform.'
|
14
14
|
spec.description = 'Run background jobs / tasks of Rails applications deployed in Amazon Elastic Beanstalk environments. Active Elastic Job is an Active Job backend which is easy to setup. No need for customised container commands or other workarounds.'
|
15
15
|
spec.license = 'MIT'
|
16
|
-
spec.homepage = 'https://github.com/
|
16
|
+
spec.homepage = 'https://github.com/active-elastic-job/active-elastic-job'
|
17
17
|
|
18
18
|
spec.files = Dir.glob('lib/**/*') + [ 'active-elastic-job.gemspec' ]
|
19
19
|
spec.executables = []
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.required_ruby_version = '>=
|
23
|
+
spec.required_ruby_version = '>= 2.7'
|
24
24
|
|
25
|
-
spec.add_dependency 'aws-sdk', '~>
|
26
|
-
spec.add_dependency 'rails', '>=
|
25
|
+
spec.add_dependency 'aws-sdk-sqs', '~> 1'
|
26
|
+
spec.add_dependency 'rails', '>= 5.2.6', '< 7.1'
|
27
|
+
|
28
|
+
spec.add_development_dependency 'amazing_print', '~> 1.2'
|
29
|
+
spec.add_development_dependency 'benchmark-ips', '~> 2.8'
|
30
|
+
spec.add_development_dependency 'bootsnap', '~>1.9'
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.2'
|
32
|
+
spec.add_development_dependency 'byebug', '~> 11.1'
|
33
|
+
spec.add_development_dependency 'climate_control', '~> 0.2'
|
34
|
+
spec.add_development_dependency 'dotenv', '~> 2.7'
|
35
|
+
spec.add_development_dependency 'fuubar', '~> 2.5'
|
36
|
+
spec.add_development_dependency 'rdoc', '~> 6.3'
|
37
|
+
spec.add_development_dependency 'rspec', '~> 3.4'
|
38
|
+
spec.add_development_dependency 'sprockets-rails', '~> 3.4'
|
39
|
+
spec.add_development_dependency 'sqlite3', '~> 1.4'
|
27
40
|
end
|
@@ -25,7 +25,10 @@ module ActiveElasticJob
|
|
25
25
|
{ 'Content-Type'.freeze => 'text/plain'.freeze },
|
26
26
|
[ 'Request forbidden!'.freeze ]
|
27
27
|
]
|
28
|
-
|
28
|
+
|
29
|
+
# 172.17.0.x is the default for Docker
|
30
|
+
# 172.18.0.x is the default for the bridge network of Docker Compose
|
31
|
+
DOCKER_HOST_IP = /172.1(7|8).0.\d+/.freeze
|
29
32
|
|
30
33
|
def initialize(app) #:nodoc:
|
31
34
|
@app = app
|
@@ -33,7 +36,7 @@ module ActiveElasticJob
|
|
33
36
|
|
34
37
|
def call(env) #:nodoc:
|
35
38
|
request = ActionDispatch::Request.new env
|
36
|
-
if enabled? && aws_sqsd?(request)
|
39
|
+
if enabled? && (aws_sqsd?(request) || sqsd?(request))
|
37
40
|
unless request.local? || sent_from_docker_host?(request)
|
38
41
|
return FORBIDDEN_RESPONSE
|
39
42
|
end
|
@@ -47,7 +50,7 @@ module ActiveElasticJob
|
|
47
50
|
rescue ActiveElasticJob::MessageVerifier::InvalidDigest => e
|
48
51
|
return FORBIDDEN_RESPONSE
|
49
52
|
end
|
50
|
-
return OK_RESPONSE
|
53
|
+
return OK_RESPONSE
|
51
54
|
end
|
52
55
|
end
|
53
56
|
@app.call(env)
|
@@ -87,6 +90,18 @@ module ActiveElasticJob
|
|
87
90
|
current_user_agent[0..('aws-sqsd'.freeze.size - 1)] == 'aws-sqsd'.freeze)
|
88
91
|
end
|
89
92
|
|
93
|
+
def sqsd?(request)
|
94
|
+
# Does not match against a Regexp
|
95
|
+
# in order to avoid performance penalties.
|
96
|
+
# Instead performs a simple string comparison.
|
97
|
+
# Benchmark runs showed an performance increase of
|
98
|
+
# up to 40%
|
99
|
+
current_user_agent = request.headers['User-Agent'.freeze]
|
100
|
+
return (current_user_agent.present? &&
|
101
|
+
current_user_agent.size >= 'sqsd'.freeze.size &&
|
102
|
+
current_user_agent[0..('sqsd'.freeze.size - 1)] == 'sqsd'.freeze)
|
103
|
+
end
|
104
|
+
|
90
105
|
def periodic_tasks_route
|
91
106
|
@periodic_tasks_route ||= config.periodic_tasks_route
|
92
107
|
end
|
@@ -118,11 +133,15 @@ module ActiveElasticJob
|
|
118
133
|
end
|
119
134
|
|
120
135
|
def sent_from_docker_host?(request)
|
121
|
-
app_runs_in_docker_container? && request
|
136
|
+
app_runs_in_docker_container? && ip_originates_from_docker?(request)
|
137
|
+
end
|
138
|
+
|
139
|
+
def ip_originates_from_docker?(request)
|
140
|
+
(request.remote_ip =~ DOCKER_HOST_IP).present? or (request.remote_addr =~ DOCKER_HOST_IP).present?
|
122
141
|
end
|
123
142
|
|
124
143
|
def app_runs_in_docker_container?
|
125
|
-
|
144
|
+
(`[ -f /proc/1/cgroup ] && cat /proc/1/cgroup` =~ /(ecs|docker)/).present?
|
126
145
|
end
|
127
146
|
end
|
128
147
|
end
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module ActiveElasticJob
|
2
2
|
class Railtie < Rails::Railtie
|
3
3
|
config.active_elastic_job = ActiveSupport::OrderedOptions.new
|
4
|
-
|
4
|
+
process_active_elastic_jobs = ENV['PROCESS_ACTIVE_ELASTIC_JOBS']
|
5
|
+
config.active_elastic_job.process_jobs = !process_active_elastic_jobs.nil? && process_active_elastic_jobs.downcase == 'true'
|
5
6
|
config.active_elastic_job.aws_credentials = lambda { Aws::InstanceProfileCredentials.new }
|
7
|
+
config.active_elastic_job.aws_region = ENV['AWS_REGION']
|
6
8
|
config.active_elastic_job.periodic_tasks_route = '/periodic_tasks'.freeze
|
7
9
|
|
8
10
|
initializer "active_elastic_job.insert_middleware" do |app|
|
9
11
|
if app.config.active_elastic_job.secret_key_base.blank?
|
10
|
-
app.config.active_elastic_job.secret_key_base = app.secrets
|
12
|
+
app.config.active_elastic_job.secret_key_base = ENV["SECRET_KEY_BASE"] || app.credentials.secret_key_base || app.secrets.secret_key_base
|
11
13
|
end
|
12
14
|
|
13
15
|
if app.config.active_elastic_job.process_jobs == true
|
16
|
+
app.config.active_elastic_job.aws_credentials ||= lambda { Aws::InstanceProfileCredentials.new }
|
14
17
|
if app.config.force_ssl
|
15
18
|
app.config.middleware.insert_before(ActionDispatch::SSL,ActiveElasticJob::Rack::SqsMessageConsumer)
|
16
19
|
else
|
data/lib/active_elastic_job.rb
CHANGED
@@ -28,7 +28,7 @@ module ActiveJob
|
|
28
28
|
class SerializedJobTooBig < Error
|
29
29
|
def initialize(serialized_job)
|
30
30
|
super(<<-MSG)
|
31
|
-
The job contains #{serialized_job.bytesize} bytes in its
|
31
|
+
The job contains #{serialized_job.bytesize} bytes in its serialized form,
|
32
32
|
which exceeds the allowed maximum of #{MAX_MESSAGE_SIZE} bytes imposed by Amazon SQS.
|
33
33
|
MSG
|
34
34
|
end
|
@@ -76,6 +76,18 @@ module ActiveJob
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
# Raised when the delay is longer than the MAX_DELAY_IN_MINUTES
|
80
|
+
class DelayTooLong < RangeError
|
81
|
+
def initialize()
|
82
|
+
super(<<-MSG)
|
83
|
+
Jobs cannot be scheduled more than #{MAX_DELAY_IN_MINUTES} minutes
|
84
|
+
into the future.
|
85
|
+
See http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
|
86
|
+
for further details!
|
87
|
+
MSG
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
79
91
|
def enqueue(job) #:nodoc:
|
80
92
|
self.class.enqueue job
|
81
93
|
end
|
@@ -100,6 +112,7 @@ module ActiveJob
|
|
100
112
|
message[:message_body],
|
101
113
|
message[:message_attributes])
|
102
114
|
end
|
115
|
+
job.provider_job_id = resp.message_id
|
103
116
|
rescue Aws::SQS::Errors::NonExistentQueue => e
|
104
117
|
unless @queue_urls[job.queue_name.to_s].nil?
|
105
118
|
@queue_urls[job.queue_name.to_s] = nil
|
@@ -113,27 +126,46 @@ module ActiveJob
|
|
113
126
|
private
|
114
127
|
|
115
128
|
def aws_client_verifies_md5_digests?
|
116
|
-
Gem::Version.new(Aws::
|
129
|
+
Gem::Version.new(Aws::CORE_GEM_VERSION) >= Gem::Version.new('2.2.19'.freeze)
|
117
130
|
end
|
118
131
|
|
119
132
|
def build_message(queue_name, serialized_job, timestamp)
|
120
|
-
{
|
133
|
+
args = {
|
121
134
|
queue_url: queue_url(queue_name),
|
122
135
|
message_body: serialized_job,
|
123
136
|
delay_seconds: calculate_delay(timestamp),
|
124
|
-
message_attributes:
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
137
|
+
message_attributes: build_message_attributes(serialized_job)
|
138
|
+
}
|
139
|
+
|
140
|
+
if queue_name.split('.').last == 'fifo'
|
141
|
+
args.merge!(fifo_required_params(serialized_job))
|
142
|
+
end
|
143
|
+
|
144
|
+
return args
|
145
|
+
end
|
146
|
+
|
147
|
+
def build_message_attributes(serialized_job)
|
148
|
+
{
|
149
|
+
"message-digest".freeze => {
|
150
|
+
string_value: message_digest(serialized_job),
|
151
|
+
data_type: "String".freeze
|
152
|
+
},
|
153
|
+
origin: {
|
154
|
+
string_value: ActiveElasticJob::ACRONYM,
|
155
|
+
data_type: "String".freeze
|
133
156
|
}
|
134
157
|
}
|
135
158
|
end
|
136
159
|
|
160
|
+
def fifo_required_params(serialized_job)
|
161
|
+
parsed_job = JSON.parse(serialized_job)
|
162
|
+
|
163
|
+
{
|
164
|
+
message_group_id: parsed_job['job_class'],
|
165
|
+
message_deduplication_id: parsed_job['job_id']
|
166
|
+
}
|
167
|
+
end
|
168
|
+
|
137
169
|
def queue_url(queue_name)
|
138
170
|
cache_key = queue_name.to_s
|
139
171
|
@queue_urls ||= { }
|
@@ -147,12 +179,7 @@ module ActiveJob
|
|
147
179
|
def calculate_delay(timestamp)
|
148
180
|
delay = (timestamp - Time.current.to_f).to_i + 1
|
149
181
|
if delay > MAX_DELAY_IN_MINUTES.minutes
|
150
|
-
|
151
|
-
"#{MAX_DELAY_IN_MINUTES} minutes into the future. " <<
|
152
|
-
"See http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html" <<
|
153
|
-
" for further details!"
|
154
|
-
|
155
|
-
raise RangeError, msg
|
182
|
+
raise DelayTooLong.new
|
156
183
|
end
|
157
184
|
delay = 0 if delay < 0
|
158
185
|
delay
|
@@ -165,7 +192,13 @@ module ActiveJob
|
|
165
192
|
end
|
166
193
|
|
167
194
|
def aws_sqs_client
|
168
|
-
|
195
|
+
options = {
|
196
|
+
credentials: aws_sqs_client_credentials,
|
197
|
+
region: aws_region
|
198
|
+
}
|
199
|
+
endpoint = Rails.application.config.active_elastic_job.endpoint
|
200
|
+
options[:endpoint] = endpoint if endpoint.present?
|
201
|
+
@aws_sqs_client ||= Aws::SQS::Client.new(options)
|
169
202
|
end
|
170
203
|
|
171
204
|
def aws_sqs_client_credentials
|
@@ -184,13 +217,13 @@ module ActiveJob
|
|
184
217
|
Rails.application.config.active_elastic_job
|
185
218
|
end
|
186
219
|
|
187
|
-
def message_digest(
|
220
|
+
def message_digest(message_body)
|
188
221
|
@verifier ||= ActiveElasticJob::MessageVerifier.new(secret_key_base)
|
189
|
-
@verifier.generate_digest(
|
222
|
+
@verifier.generate_digest(message_body)
|
190
223
|
end
|
191
224
|
|
192
|
-
def verify_md5_digests!(response,
|
193
|
-
calculated = md5_of_message_body(
|
225
|
+
def verify_md5_digests!(response, message_body, message_attributes)
|
226
|
+
calculated = md5_of_message_body(message_body)
|
194
227
|
returned = response.md5_of_message_body
|
195
228
|
if calculated != returned
|
196
229
|
raise MD5MismatchError.new response.message_id, calculated, returned
|
@@ -199,7 +232,7 @@ module ActiveJob
|
|
199
232
|
if message_attributes
|
200
233
|
calculated = md5_of_message_attributes(message_attributes)
|
201
234
|
returned = response.md5_of_message_attributes
|
202
|
-
if
|
235
|
+
if calculated != returned
|
203
236
|
raise MD5MismatchError.new response.message_id, calculated, returned
|
204
237
|
end
|
205
238
|
end
|
metadata
CHANGED
@@ -1,48 +1,224 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_elastic_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tawan Sierek
|
8
|
-
|
8
|
+
- Joey Paris
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2022-01-19 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: aws-sdk
|
15
|
+
name: aws-sdk-sqs
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
+
version: '1'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
27
|
+
version: '1'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: rails
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
+
version: 5.2.6
|
35
|
+
- - "<"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '7.1'
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
37
41
|
requirements:
|
38
42
|
- - ">="
|
39
43
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
44
|
+
version: 5.2.6
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '7.1'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: amazing_print
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: benchmark-ips
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.8'
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.8'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: bootsnap
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.9'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.9'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: bundler
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.2'
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.2'
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: byebug
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '11.1'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '11.1'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: climate_control
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.2'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.2'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: dotenv
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.7'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.7'
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: fuubar
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.5'
|
153
|
+
type: :development
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2.5'
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: rdoc
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '6.3'
|
167
|
+
type: :development
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '6.3'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rspec
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.4'
|
181
|
+
type: :development
|
182
|
+
prerelease: false
|
183
|
+
version_requirements: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '3.4'
|
188
|
+
- !ruby/object:Gem::Dependency
|
189
|
+
name: sprockets-rails
|
190
|
+
requirement: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '3.4'
|
195
|
+
type: :development
|
196
|
+
prerelease: false
|
197
|
+
version_requirements: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '3.4'
|
202
|
+
- !ruby/object:Gem::Dependency
|
203
|
+
name: sqlite3
|
204
|
+
requirement: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.4'
|
209
|
+
type: :development
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '1.4'
|
41
216
|
description: Run background jobs / tasks of Rails applications deployed in Amazon
|
42
217
|
Elastic Beanstalk environments. Active Elastic Job is an Active Job backend which
|
43
218
|
is easy to setup. No need for customised container commands or other workarounds.
|
44
219
|
email:
|
45
220
|
- tawan@sierek.com
|
221
|
+
- mail@joeyparis.me
|
46
222
|
executables: []
|
47
223
|
extensions: []
|
48
224
|
extra_rdoc_files: []
|
@@ -55,11 +231,11 @@ files:
|
|
55
231
|
- lib/active_elastic_job/railtie.rb
|
56
232
|
- lib/active_elastic_job/version.rb
|
57
233
|
- lib/active_job/queue_adapters/active_elastic_job_adapter.rb
|
58
|
-
homepage: https://github.com/
|
234
|
+
homepage: https://github.com/active-elastic-job/active-elastic-job
|
59
235
|
licenses:
|
60
236
|
- MIT
|
61
237
|
metadata: {}
|
62
|
-
post_install_message:
|
238
|
+
post_install_message:
|
63
239
|
rdoc_options: []
|
64
240
|
require_paths:
|
65
241
|
- lib
|
@@ -67,16 +243,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
243
|
requirements:
|
68
244
|
- - ">="
|
69
245
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
246
|
+
version: '2.7'
|
71
247
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
248
|
requirements:
|
73
249
|
- - ">="
|
74
250
|
- !ruby/object:Gem::Version
|
75
251
|
version: '0'
|
76
252
|
requirements: []
|
77
|
-
|
78
|
-
|
79
|
-
signing_key:
|
253
|
+
rubygems_version: 3.2.32
|
254
|
+
signing_key:
|
80
255
|
specification_version: 4
|
81
256
|
summary: Active Elastic Job is a simple to use Active Job backend for Rails applications
|
82
257
|
deployed on the Amazon Elastic Beanstalk platform.
|