simple_worker 0.3.19 → 0.3.20
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.
- data/README.markdown +22 -10
- data/lib/railtie.rb +1 -1
- data/lib/simple_worker.rb +4 -0
- data/lib/simple_worker/base.rb +59 -37
- data/lib/simple_worker/config.rb +3 -3
- data/lib/simple_worker/service.rb +12 -2
- data/test/models/model_2.rb +22 -0
- data/test/test_worker_2.rb +1 -0
- metadata +5 -3
data/README.markdown
CHANGED
@@ -45,10 +45,12 @@ Let's say someone does something in your app and you want to send an email about
|
|
45
45
|
worker.to = current_user.email
|
46
46
|
worker.subject = "Here is your mail!"
|
47
47
|
worker.body = "This is the body"
|
48
|
-
|
48
|
+
worker.run_local
|
49
49
|
|
50
|
-
|
51
|
-
|
50
|
+
Once you've got it working locally, the next step is to run it on the SimpleWorker cloud.
|
51
|
+
|
52
|
+
Queue up your Worker on the SimpleWorker Cloud
|
53
|
+
----------------------------------------------
|
52
54
|
|
53
55
|
Let's say someone does something in your app and you want to send an email about it.
|
54
56
|
|
@@ -56,7 +58,9 @@ Let's say someone does something in your app and you want to send an email about
|
|
56
58
|
worker.to = current_user.email
|
57
59
|
worker.subject = "Here is your mail!"
|
58
60
|
worker.body = "This is the body"
|
59
|
-
|
61
|
+
worker.queue
|
62
|
+
|
63
|
+
This will send it off to the SimpleWorker cloud.
|
60
64
|
|
61
65
|
Schedule your Worker
|
62
66
|
--------------------
|
@@ -68,7 +72,7 @@ action in your application. This is almost the same as queuing your worker.
|
|
68
72
|
worker.to = current_user.email
|
69
73
|
worker.subject = "Here is your mail!"
|
70
74
|
worker.body = "This is the body"
|
71
|
-
|
75
|
+
worker.schedule(:start_at=>1.hours.since)
|
72
76
|
|
73
77
|
Check Status
|
74
78
|
------------
|
@@ -79,7 +83,7 @@ If you still have access to the worker object, just call:
|
|
79
83
|
|
80
84
|
If you only have the job ID, call:
|
81
85
|
|
82
|
-
SimpleWorker.status(job_id)
|
86
|
+
SimpleWorker.service.status(job_id)
|
83
87
|
|
84
88
|
This will return a hash like:
|
85
89
|
|
@@ -91,22 +95,27 @@ This will return a hash like:
|
|
91
95
|
"duration"=>nil,
|
92
96
|
"progress"=>{"percent"=>25}}
|
93
97
|
|
94
|
-
TODO: How to access log.
|
95
98
|
|
96
99
|
Logging
|
97
100
|
-------
|
98
101
|
|
102
|
+
In your worker, just call the log method with the string you want logged:
|
103
|
+
|
99
104
|
log "Starting to do something..."
|
100
105
|
|
101
|
-
The log will be available for viewing via the SimpleWorker UI or via log in the API
|
106
|
+
The log will be available for viewing via the SimpleWorker UI or via log in the API:
|
107
|
+
|
108
|
+
SimpleWorker.service.log(job_id)
|
102
109
|
|
103
110
|
Setting Progress
|
104
111
|
----------------
|
105
112
|
|
106
|
-
|
113
|
+
This is just a way to let your users know where the job is at if required.
|
107
114
|
|
108
|
-
|
115
|
+
set_progress(:percent => 25, :message => "We are a quarter of the way there!")
|
109
116
|
|
117
|
+
You can actually put anything in this hash and it will be returned with a call to status. We recommend using
|
118
|
+
the format above for consistency and to get some additional features where we look for these values.
|
110
119
|
|
111
120
|
Schedule a Recurring Job - CRON
|
112
121
|
------------------------------
|
@@ -178,6 +187,9 @@ Or simpler yet, try using relative paths:
|
|
178
187
|
merge "../app/models/user"
|
179
188
|
merge "../app/models/account.rb"
|
180
189
|
|
190
|
+
The opposite can be done as well with "unmerge" and can be useful when using Rails to exclude classes that are automatically
|
191
|
+
merged.
|
192
|
+
|
181
193
|
|
182
194
|
Bringing in other Workers
|
183
195
|
---------------------
|
data/lib/railtie.rb
CHANGED
data/lib/simple_worker.rb
CHANGED
data/lib/simple_worker/base.rb
CHANGED
@@ -12,10 +12,12 @@ module SimpleWorker
|
|
12
12
|
attr_accessor :subclass, :caller_file
|
13
13
|
@merged = []
|
14
14
|
@merged_workers = []
|
15
|
+
@unmerged = []
|
15
16
|
|
16
17
|
def reset!
|
17
18
|
@merged = []
|
18
19
|
@merged_workers = []
|
20
|
+
@unmerged = []
|
19
21
|
end
|
20
22
|
|
21
23
|
def inherited(subclass)
|
@@ -35,30 +37,47 @@ module SimpleWorker
|
|
35
37
|
super
|
36
38
|
end
|
37
39
|
|
40
|
+
def check_for_file(f)
|
41
|
+
f = f.to_str
|
42
|
+
unless ends_with?(f, ".rb")
|
43
|
+
f << ".rb"
|
44
|
+
end
|
45
|
+
exists = false
|
46
|
+
if File.exist? f
|
47
|
+
exists = true
|
48
|
+
else
|
49
|
+
# try relative
|
50
|
+
# p caller
|
51
|
+
f2 = File.join(File.dirname(caller[3]), f)
|
52
|
+
puts 'f2=' + f2
|
53
|
+
if File.exist? f2
|
54
|
+
exists = true
|
55
|
+
f = f2
|
56
|
+
end
|
57
|
+
end
|
58
|
+
unless exists
|
59
|
+
raise "File not found: " + f
|
60
|
+
end
|
61
|
+
f = File.expand_path(f)
|
62
|
+
require f
|
63
|
+
f
|
64
|
+
end
|
65
|
+
|
38
66
|
# merges the specified files.
|
39
67
|
# todo: don't allow multiple files per merge, just one like require
|
40
68
|
def merge(*files)
|
41
69
|
files.each do |f|
|
42
|
-
f = f
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
exists = true
|
54
|
-
f = f2
|
55
|
-
end
|
56
|
-
end
|
57
|
-
unless exists
|
58
|
-
raise "File not found: " + f
|
59
|
-
end
|
60
|
-
require f
|
61
|
-
@merged << File.expand_path(f)
|
70
|
+
f = check_for_file(f)
|
71
|
+
@merged << f
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Opposite of merge, this will omit the files you specify from being merged in. Useful in Rails apps
|
76
|
+
# where a lot of things are auto-merged by default like your models.
|
77
|
+
def unmerge(*files)
|
78
|
+
files.each do |f|
|
79
|
+
f = check_for_file(f)
|
80
|
+
@unmerged << f
|
62
81
|
end
|
63
82
|
end
|
64
83
|
|
@@ -80,7 +99,7 @@ module SimpleWorker
|
|
80
99
|
end
|
81
100
|
|
82
101
|
def user_dir
|
83
|
-
"
|
102
|
+
"./"
|
84
103
|
end
|
85
104
|
|
86
105
|
def set_progress(hash)
|
@@ -189,37 +208,40 @@ module SimpleWorker
|
|
189
208
|
puts 'upload_if_needed ' + self.class.name
|
190
209
|
# Todo, watch for this file changing or something so we can reupload
|
191
210
|
unless uploaded?
|
192
|
-
merged
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
puts 'subclass
|
211
|
+
merged = self.class.instance_variable_get(:@merged)
|
212
|
+
unmerged = self.class.instance_variable_get(:@unmerged)
|
213
|
+
# puts 'merged1=' + merged.inspect
|
214
|
+
|
215
|
+
subclass = self.class
|
216
|
+
rfile = subclass.instance_variable_get(:@caller_file) # Base.caller_file # File.expand_path(Base.subclass)
|
217
|
+
# puts 'subclass file=' + rfile.inspect
|
218
|
+
# puts 'subclass.name=' + subclass.name
|
199
219
|
superclass = subclass
|
200
220
|
# Also get merged from subclasses up to SimpleWorker::Base
|
201
221
|
while (superclass = superclass.superclass)
|
202
|
-
puts 'superclass=' + superclass.name
|
222
|
+
# puts 'superclass=' + superclass.name
|
203
223
|
break if superclass.name == SimpleWorker::Base.name
|
204
224
|
super_merged = superclass.instance_variable_get(:@merged)
|
205
225
|
# puts 'merging caller file: ' + superclass.instance_variable_get(:@caller_file).inspect
|
206
226
|
super_merged << superclass.instance_variable_get(:@caller_file)
|
207
227
|
merged = super_merged + merged
|
208
|
-
puts 'merged with superclass=' + merged.inspect
|
228
|
+
# puts 'merged with superclass=' + merged.inspect
|
209
229
|
end
|
210
230
|
merged += SimpleWorker.config.models if SimpleWorker.config.models
|
211
|
-
SimpleWorker.service.upload(rfile, subclass.name, :merge=>merged)
|
231
|
+
SimpleWorker.service.upload(rfile, subclass.name, :merge=>merged, :unmerge=>unmerged)
|
212
232
|
self.class.instance_variable_set(:@uploaded, true)
|
213
233
|
else
|
214
234
|
puts 'already uploaded for ' + self.class.name
|
215
235
|
end
|
216
236
|
merged_workers = self.class.instance_variable_get(:@merged_workers)
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
237
|
+
if merged_workers.size > 0
|
238
|
+
puts 'now uploading merged workers ' + merged_workers.inspect
|
239
|
+
merged_workers.each do |mw|
|
240
|
+
# to support merges in the secondary worker, we should instantiate it here, then call "upload"
|
241
|
+
puts 'instantiating and uploading ' + mw[1]
|
242
|
+
Kernel.const_get(mw[1]).new.upload
|
222
243
|
# SimpleWorker.service.upload(mw[0], mw[1])
|
244
|
+
end
|
223
245
|
end
|
224
246
|
|
225
247
|
after_upload
|
@@ -231,7 +253,7 @@ module SimpleWorker
|
|
231
253
|
data[iv] = instance_variable_get(iv)
|
232
254
|
end
|
233
255
|
|
234
|
-
config_data
|
256
|
+
config_data = SimpleWorker.config.get_atts_to_send
|
235
257
|
data[:sw_config] = config_data
|
236
258
|
return data
|
237
259
|
end
|
data/lib/simple_worker/config.rb
CHANGED
@@ -25,9 +25,9 @@ module SimpleWorker
|
|
25
25
|
|
26
26
|
def get_atts_to_send
|
27
27
|
config_data = {}
|
28
|
-
config_data['database'] = database if database
|
29
|
-
config_data['global_attributes'] = global_attributes if global_attributes
|
30
|
-
config_data['host'] = host if host
|
28
|
+
config_data['database'] = self.database if self.database
|
29
|
+
config_data['global_attributes'] = self.global_attributes if self.global_attributes
|
30
|
+
config_data['host'] = self.host if self.host
|
31
31
|
config_data
|
32
32
|
end
|
33
33
|
|
@@ -27,7 +27,7 @@ module SimpleWorker
|
|
27
27
|
existing_md5 = IO.read(f)
|
28
28
|
end
|
29
29
|
|
30
|
-
filename = build_merged_file(filename, options[:merge]) if options[:merge]
|
30
|
+
filename = build_merged_file(filename, options[:merge], options[:unmerge]) if options[:merge]
|
31
31
|
|
32
32
|
# sys.classes[subclass].__file__
|
33
33
|
# puts '__FILE__=' + Base.subclass.__file__.to_s
|
@@ -56,10 +56,20 @@ module SimpleWorker
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def build_merged_file(filename, merge)
|
59
|
+
def build_merged_file(filename, merge, unmerge)
|
60
60
|
merge = merge.dup
|
61
61
|
merge << filename
|
62
|
+
#puts "merge before uniq! " + merge.inspect
|
62
63
|
merge.uniq!
|
64
|
+
# puts "merge after uniq! " + merge.inspect
|
65
|
+
|
66
|
+
if unmerge
|
67
|
+
unmerge.each do |x|
|
68
|
+
deleted = merge.delete x
|
69
|
+
puts "Unmerging #{x}. Success? #{deleted}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
63
73
|
fname2 = File.join(Dir.tmpdir(), File.basename(filename))
|
64
74
|
# puts 'fname2=' + fname2
|
65
75
|
# puts 'merged_file_array=' + merge.inspect
|
@@ -0,0 +1,22 @@
|
|
1
|
+
begin
|
2
|
+
require File.join(File.dirname(__FILE__), '../../lib/simple_worker')
|
3
|
+
rescue Exception => ex
|
4
|
+
puts 'ERROR!!! ' + ex.message
|
5
|
+
# require 'simple_worker'
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
class Model2
|
10
|
+
attr_accessor :heidi, :ho
|
11
|
+
|
12
|
+
include SimpleWorker::UsedInWorker
|
13
|
+
|
14
|
+
def say_hello
|
15
|
+
log "Hi there sir"
|
16
|
+
end
|
17
|
+
|
18
|
+
# testk laksdfj klasj df
|
19
|
+
def test
|
20
|
+
log 'test'
|
21
|
+
end
|
22
|
+
end
|
data/test/test_worker_2.rb
CHANGED
@@ -9,6 +9,7 @@ end
|
|
9
9
|
class TestWorker2 < SimpleWorker::Base
|
10
10
|
|
11
11
|
merge File.join(File.dirname(__FILE__), 'models', 'model_1.rb')
|
12
|
+
unmerge 'models/model_2.rb'
|
12
13
|
merge_worker File.join(File.dirname(__FILE__), 'second_worker.rb'), 'SecondWorker'
|
13
14
|
|
14
15
|
attr_accessor :s3_key, :times, :x
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 20
|
9
|
+
version: 0.3.20
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Travis Reeder
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-01-07 00:00:00 -08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- rails/init.rb
|
50
50
|
- README.markdown
|
51
51
|
- test/models/model_1.rb
|
52
|
+
- test/models/model_2.rb
|
52
53
|
- test/requiring_worker.rb
|
53
54
|
- test/scheduled_worker.rb
|
54
55
|
- test/second_worker.rb
|
@@ -92,6 +93,7 @@ specification_version: 3
|
|
92
93
|
summary: Classified
|
93
94
|
test_files:
|
94
95
|
- test/models/model_1.rb
|
96
|
+
- test/models/model_2.rb
|
95
97
|
- test/requiring_worker.rb
|
96
98
|
- test/scheduled_worker.rb
|
97
99
|
- test/second_worker.rb
|