localjob 0.4.0 → 0.4.1
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 +35 -2
- data/lib/localjob/cli.rb +10 -2
- data/lib/localjob/version.rb +1 -1
- data/lib/localjob/worker.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 162114bce1539ca945710b05070111780c6b4aa4
|
4
|
+
data.tar.gz: 8c3d1941d8e4f4a709aee68dcbbc15008bbe86b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94919e17376f5b869d7eac9a7ead522ca3aedf967ff8431019463487138b5b43b127021d63036adff9510a8664794c09e0c88e35f8618d43f9b4d0e03a3a9df3
|
7
|
+
data.tar.gz: 5bc9fd26d206583f8c7a23a895dd0cc6107a7ee51dd8fecdfa157bd5aaadde1e67ca4d81dc43a0a090ecbf81e8c19000862f913890df5f090b0abe8a27b72872
|
data/README.md
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
Localjob is a simple, self-contained background queue built on top of [System V
|
4
4
|
message queues][sysv] (SysV Message Queue => SysV MQ for short). Workers and the
|
5
5
|
app pushing to the queue must reside on the same machine. It's the sqlite of
|
6
|
-
background queues. Here's a post about [how it works][blog].
|
6
|
+
background queues. Here's a post about [how it works][blog]. You can run
|
7
|
+
Localjob either as a seperate process, or as a thread in your app.
|
7
8
|
|
8
9
|
Localjob is for early-development situations where you don't need a
|
9
10
|
full-featured background queue, but just want to get started with something
|
@@ -16,7 +17,7 @@ Localjob works on Ruby >= 2.0.0 on Linux and OS X.
|
|
16
17
|
Add it to your Gemfile:
|
17
18
|
|
18
19
|
```ruby
|
19
|
-
gem 'localjob'
|
20
|
+
gem 'localjob'
|
20
21
|
```
|
21
22
|
|
22
23
|
## Usage
|
@@ -67,6 +68,24 @@ BackgroundQueue << EmailJob.new(current_user.id, welcome_email)
|
|
67
68
|
|
68
69
|
### Managing workers
|
69
70
|
|
71
|
+
There are two ways to spawn workers, either a thread inside the process emitting
|
72
|
+
events, or as a separate process managed with the `localjob` command-line
|
73
|
+
utility.
|
74
|
+
|
75
|
+
#### Thread
|
76
|
+
|
77
|
+
Spawn the worker thread in an initializer where you are initializing Localjob as
|
78
|
+
well:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
BackgroundQueue = Localjob.new
|
82
|
+
|
83
|
+
worker = Localjob::Worker.new(BackgroundQueue, logger: Rails.logger)
|
84
|
+
worker.work(thread: true)
|
85
|
+
```
|
86
|
+
|
87
|
+
#### Process
|
88
|
+
|
70
89
|
Spawning workers can be done with `localjob`. Run `localjob work` to spawn a
|
71
90
|
single worker. It takes a few arguments. The most important being `--require`
|
72
91
|
which takes a path the worker will require before processing jobs. For Rails,
|
@@ -114,5 +133,19 @@ def test_pop_and_send_to_worker
|
|
114
133
|
end
|
115
134
|
```
|
116
135
|
|
136
|
+
### Multiple queues
|
137
|
+
|
138
|
+
If you wish to have multiple queues you can have multiple Localjob objects
|
139
|
+
referencing different queues. A worker can only work off a single queue at a
|
140
|
+
time, so you will have to spawn multiple thread or process workers. Example:
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
MailQueue = Localjob.new(0xDEADC0DE)
|
144
|
+
DefaultQueue = Localjob.new(0xDEADCAFE)
|
145
|
+
```
|
146
|
+
|
147
|
+
Note that Localjob takes a hex value as the queue name. This is how the SysV
|
148
|
+
adapter identifies different queues.
|
149
|
+
|
117
150
|
[sysv]: http://man7.org/linux/man-pages/man7/svipc.7.html
|
118
151
|
[blog]: http://sirupsen.com/unix-background-queue/
|
data/lib/localjob/cli.rb
CHANGED
@@ -5,11 +5,10 @@ class Localjob
|
|
5
5
|
option :queue, aliases: ["-q"], type: :string, default: "0x10CA110B"
|
6
6
|
option :require, aliases: ["-r"], type: :string, default: "."
|
7
7
|
option :pid_file, aliases: ["-p"], type: :string
|
8
|
-
option :daemon, aliases: ["-d"], type: :boolean
|
9
8
|
desc "work", "Start worker to process jobs"
|
10
9
|
def work
|
11
10
|
load_environment options[:require]
|
12
|
-
Localjob::Worker.new(options[:queue].to_i(16), *options.slice(:
|
11
|
+
Localjob::Worker.new(options[:queue].to_i(16), *options.slice(:pid_file)).work
|
13
12
|
end
|
14
13
|
|
15
14
|
private
|
@@ -20,6 +19,15 @@ class Localjob
|
|
20
19
|
::Rails.application.eager_load!
|
21
20
|
elsif File.file?(file)
|
22
21
|
require File.expand_path(file)
|
22
|
+
else
|
23
|
+
puts <<EOS
|
24
|
+
To run a localjob worker, you must supply the --require flag. This is the file
|
25
|
+
the worker requires before working off jobs.
|
26
|
+
|
27
|
+
Otherwise localjob will complain about undefined classes, because they are not
|
28
|
+
loaded in the context of the worker.
|
29
|
+
EOS
|
30
|
+
exit!
|
23
31
|
end
|
24
32
|
end
|
25
33
|
|
data/lib/localjob/version.rb
CHANGED
data/lib/localjob/worker.rb
CHANGED