delayed_job_es 0.1.5 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +65 -6
- data/lib/delayed/backend/es.rb +27 -7
- data/lib/delayed_job_es/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fd671a6bb8f35764c38d1acd3c7f2b29e3eea26
|
4
|
+
data.tar.gz: 9655192518c56711d3a5f06f318a9e3dbd7f5dcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7863a77e1da57fe74f39731dc069feb2f42a981607bb3e9a86d0a4f10be88dcbea05f017c7500795dea1b25f52db4359972b199d01a89cef925d53b2ae13b3e
|
7
|
+
data.tar.gz: 84b681c6cd05ffc38665f095a9ccfb718a9fbcbf72a2dcf9d140728fa05f20bd03d18f7a36678a2c82ee8eb2e076d7b9bea54f39ab55ab39d41f0109073be8f4
|
data/README.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# DelayedJobEs
|
2
2
|
|
3
|
-
|
3
|
+
Delayed Job Backend adapter for ElasticSearch.
|
4
|
+
|
5
|
+
|
6
|
+
The gem uses the 'elasticsearch-transport' and 'elasticsearch-api' as dependencies.
|
7
|
+
|
8
|
+
It has no other dependencies, and should be easy to integrate into any ruby based project that uses elasticsearch in any form.
|
4
9
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
10
|
|
7
11
|
## Installation
|
8
12
|
|
@@ -14,7 +18,7 @@ gem 'delayed_job_es'
|
|
14
18
|
|
15
19
|
And then execute:
|
16
20
|
|
17
|
-
$ bundle
|
21
|
+
$ bundle install
|
18
22
|
|
19
23
|
Or install it yourself as:
|
20
24
|
|
@@ -22,13 +26,68 @@ Or install it yourself as:
|
|
22
26
|
|
23
27
|
## Usage
|
24
28
|
|
25
|
-
|
29
|
+
### Job Class
|
30
|
+
|
31
|
+
Create a Job Class in the app/jobs folder :
|
32
|
+
|
33
|
+
```
|
34
|
+
class BackgroundJob < ActiveJob::Base
|
35
|
+
|
36
|
+
queue_as :default
|
37
|
+
|
38
|
+
## Specify the queue adapter as delayed_job_es
|
39
|
+
self.queue_adapter = :delayed_job
|
40
|
+
|
41
|
+
self.logger = Logger.new(nil) if Rails.env.test?
|
42
|
+
|
43
|
+
rescue_from(StandardError) do |exception|
|
44
|
+
puts exception.message
|
45
|
+
puts exception.backtrace.join("\n")
|
46
|
+
end
|
47
|
+
|
48
|
+
def perform(args)
|
49
|
+
## process job here.
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
### Es Indexes
|
56
|
+
|
57
|
+
Create required ES Indexes:
|
58
|
+
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
# in the rails console, (you only need to do this once)
|
62
|
+
DelayedJob::Backend::Es::Job.create_indices
|
63
|
+
```
|
64
|
+
|
65
|
+
### Job Daemon
|
66
|
+
|
67
|
+
Open a terminal window, navigate to your project and run :
|
68
|
+
|
69
|
+
$ bundle exec rake jobs:work
|
70
|
+
|
71
|
+
This will run a job daemon(standard DelayedJob).
|
72
|
+
|
73
|
+
|
74
|
+
### Queue a Job
|
75
|
+
|
76
|
+
To queue a job, from anywhere using the job class above run (you can try this in the rails console, in another window):
|
77
|
+
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
BackgroundJob.perform_later({"hello" => "world"})
|
81
|
+
```
|
82
|
+
|
83
|
+
If you look in the jobs daemon window, you will see the job getting processed.
|
84
|
+
|
85
|
+
|
86
|
+
|
26
87
|
|
27
88
|
## Development
|
28
89
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
90
|
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
91
|
|
33
92
|
## Contributing
|
34
93
|
|
data/lib/delayed/backend/es.rb
CHANGED
@@ -9,6 +9,7 @@ module Delayed
|
|
9
9
|
module Es
|
10
10
|
class Job
|
11
11
|
attr_accessor :id
|
12
|
+
attr_accessor :version
|
12
13
|
attr_accessor :priority
|
13
14
|
attr_accessor :attempts
|
14
15
|
attr_accessor :handler
|
@@ -335,18 +336,20 @@ module Delayed
|
|
335
336
|
|
336
337
|
search_response = get_client.search :index => INDEX_NAME, :type => DOCUMENT_TYPE,
|
337
338
|
:body => {
|
339
|
+
version: true,
|
338
340
|
size: limit,
|
339
341
|
sort: sort,
|
340
342
|
query: query
|
341
343
|
}
|
342
344
|
|
343
345
|
|
344
|
-
|
345
|
-
|
346
|
+
puts "search_response is"
|
347
|
+
puts search_response["hits"]["hits"]
|
346
348
|
## it would return the first hit.
|
347
349
|
search_response["hits"]["hits"].map{|c|
|
348
350
|
k = new(c["_source"])
|
349
351
|
k.id = c["_id"]
|
352
|
+
k.version = c["_version"]
|
350
353
|
k
|
351
354
|
}
|
352
355
|
|
@@ -362,21 +365,38 @@ module Delayed
|
|
362
365
|
:lang => "painless",
|
363
366
|
:params => {
|
364
367
|
:locked_at => self.class.db_time_now.strftime("%Y-%m-%d %H:%M:%S"),
|
365
|
-
:locked_by => worker
|
368
|
+
:locked_by => worker,
|
369
|
+
:version => self.version
|
366
370
|
},
|
367
371
|
:source => '''
|
368
|
-
ctx.
|
369
|
-
|
372
|
+
if(ctx._version == params.version){
|
373
|
+
ctx._source.locked_at = params.locked_at;
|
374
|
+
ctx._source.locked_by = params.locked_by;
|
375
|
+
}
|
376
|
+
else{
|
377
|
+
ctx.op = "none";
|
378
|
+
}
|
370
379
|
'''
|
371
380
|
}
|
381
|
+
|
382
|
+
puts "Script is"
|
383
|
+
puts JSON.pretty_generate(script)
|
384
|
+
|
385
|
+
|
372
386
|
#begin
|
373
387
|
response = self.class.get_client.update(index: INDEX_NAME, type: DOCUMENT_TYPE, id: self.id.to_s, body: {
|
374
388
|
:script => script,
|
375
389
|
:scripted_upsert => false,
|
376
390
|
:upsert => {}
|
377
391
|
})
|
378
|
-
|
379
|
-
|
392
|
+
|
393
|
+
## if this returns no-op chec,
|
394
|
+
puts "lock response:"
|
395
|
+
puts response.to_s
|
396
|
+
|
397
|
+
|
398
|
+
return response["result"] == "updated"
|
399
|
+
|
380
400
|
end
|
381
401
|
|
382
402
|
def self.db_time_now
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_es
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Great Manta
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|