simple_worker 0.7.0.beta.3 → 0.7.0
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 +15 -0
- data/lib/railtie.rb +56 -12
- data/lib/simple_worker/base.rb +73 -48
- data/lib/simple_worker/config.rb +2 -0
- data/lib/simple_worker/service.rb +65 -34
- metadata +5 -5
data/README.markdown
CHANGED
@@ -104,6 +104,16 @@ action in your application. This is almost the same as queuing your worker.
|
|
104
104
|
worker.body = "This is the body"
|
105
105
|
worker.schedule(:start_at=>1.hours.since)
|
106
106
|
|
107
|
+
By default, if you call `schedule` more than once for the same worker class, the new schedule will replace the old one. If you'd
|
108
|
+
like multiple schedules for the same class, provide a `:name` parameter:
|
109
|
+
|
110
|
+
worker.schedule(:name=>"EmailWorkerDaily", :start_at=>......)
|
111
|
+
|
112
|
+
You can also set priority for scheduled jobs:
|
113
|
+
|
114
|
+
worker.schedule(:priority=>1, ....)
|
115
|
+
|
116
|
+
|
107
117
|
Check Status
|
108
118
|
------------
|
109
119
|
|
@@ -275,3 +285,8 @@ Then in your worker, you would have the attributes defined:
|
|
275
285
|
|
276
286
|
attr_accessor :db_user, :db_pass
|
277
287
|
|
288
|
+
|
289
|
+
Development of the Gem
|
290
|
+
----------------------
|
291
|
+
|
292
|
+
Join the discussion group at: https://groups.google.com/forum/?hl=en#!forum/simple_worker
|
data/lib/railtie.rb
CHANGED
@@ -6,8 +6,20 @@ require 'rails'
|
|
6
6
|
module SimpleWorker
|
7
7
|
class Railtie < Rails::Railtie
|
8
8
|
|
9
|
+
@gems_to_skip = ['actionmailer', 'actionpack', 'activemodel', 'activeresource', 'activesupport',
|
10
|
+
'bundler',
|
11
|
+
'mail',
|
12
|
+
'mysql2',
|
13
|
+
'rails',
|
14
|
+
'tzinfo' # HUGE!
|
15
|
+
]
|
16
|
+
|
17
|
+
def self.gems_to_skip
|
18
|
+
@gems_to_skip
|
19
|
+
end
|
20
|
+
|
9
21
|
initializer "simple_worker.configure_rails_initialization" do |app|
|
10
|
-
SimpleWorker.logger.info
|
22
|
+
SimpleWorker.logger.info "Initializing SimpleWorker for Rails 3..."
|
11
23
|
start_time = Time.now
|
12
24
|
SimpleWorker.configure do |c2|
|
13
25
|
models_path = File.join(Rails.root, 'app/models/*.rb')
|
@@ -29,23 +41,55 @@ module SimpleWorker
|
|
29
41
|
|
30
42
|
def get_required_gems
|
31
43
|
gems_in_gemfile = Bundler.environment.dependencies.select { |d| d.groups.include?(:default) }
|
44
|
+
SimpleWorker.logger.debug 'gems in gemfile=' + gems_in_gemfile.inspect
|
32
45
|
gems =[]
|
33
46
|
specs = Bundler.load.specs
|
34
47
|
SimpleWorker.logger.debug 'Bundler specs=' + specs.inspect
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
spec
|
40
|
-
if spec
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
48
|
+
SimpleWorker.logger.debug "gems_to_skip=" + self.class.gems_to_skip.inspect
|
49
|
+
specs.each do |spec|
|
50
|
+
SimpleWorker.logger.debug 'spec.name=' + spec.name.inspect
|
51
|
+
SimpleWorker.logger.debug 'spec=' + spec.inspect
|
52
|
+
p spec.methods
|
53
|
+
if self.class.gems_to_skip.include?(spec.name)
|
54
|
+
SimpleWorker.logger.debug "Skipping #{spec.name}"
|
55
|
+
next
|
56
|
+
end
|
57
|
+
# next if dep.name=='rails' #monkey patch
|
58
|
+
gem_info = {:name=>spec.name, :version=>spec.version}
|
59
|
+
gem_info[:auto_merged] = true
|
60
|
+
# Now find dependency in gemfile in case user set the require
|
61
|
+
dep = gems_in_gemfile.find { |g| g.name == gem_info[:name] }
|
62
|
+
if dep
|
63
|
+
SimpleWorker.logger.debug 'dep found in gemfile: ' + dep.inspect
|
64
|
+
SimpleWorker.logger.debug 'autorequire=' + dep.autorequire.inspect
|
65
|
+
gem_info[:require] = dep.autorequire if dep.autorequire
|
66
|
+
# spec = specs.find { |g| g.name==gem_info[:name] }
|
45
67
|
end
|
68
|
+
gem_info[:version] = spec.version.to_s
|
69
|
+
gems << gem_info
|
70
|
+
path = SimpleWorker::Service.get_gem_path(gem_info)
|
71
|
+
if path
|
72
|
+
gem_info[:path] = path
|
73
|
+
if gem_info[:require].nil? && dep
|
74
|
+
# see if we should try to require this in our worker
|
75
|
+
require_path = gem_info[:path] + "/lib/#{gem_info[:name]}.rb"
|
76
|
+
SimpleWorker.logger.debug "require_path=" + require_path
|
77
|
+
if File.exists?(require_path)
|
78
|
+
SimpleWorker.logger.debug "File exists for require"
|
79
|
+
gem_info[:require] = gem_info[:name]
|
80
|
+
else
|
81
|
+
SimpleWorker.logger.debug "no require"
|
82
|
+
# gem_info[:no_require] = true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# else
|
87
|
+
# SimpleWorker.logger.warn "Could not find gem spec for #{gem_info[:name]}"
|
88
|
+
# raise "Could not find gem spec for #{gem_info[:name]}"
|
89
|
+
# end
|
46
90
|
end
|
47
91
|
gems
|
48
92
|
end
|
49
|
-
end
|
50
93
|
|
94
|
+
end
|
51
95
|
end
|
data/lib/simple_worker/base.rb
CHANGED
@@ -15,6 +15,7 @@ module SimpleWorker
|
|
15
15
|
@merged_mailers = []
|
16
16
|
@merged_folders = {}
|
17
17
|
@unmerged = []
|
18
|
+
@unmerged_gems = []
|
18
19
|
|
19
20
|
def reset!
|
20
21
|
@merged = []
|
@@ -23,6 +24,7 @@ module SimpleWorker
|
|
23
24
|
@merged_mailers = []
|
24
25
|
@merged_folders = {}
|
25
26
|
@unmerged = []
|
27
|
+
@unmerged_gems = []
|
26
28
|
end
|
27
29
|
|
28
30
|
def inherited(subclass)
|
@@ -68,19 +70,33 @@ module SimpleWorker
|
|
68
70
|
f
|
69
71
|
end
|
70
72
|
|
71
|
-
|
72
|
-
def merge_gem(gem_name,
|
73
|
+
# merges the specified gem.
|
74
|
+
def merge_gem(gem_name, options={})
|
73
75
|
gem_info = {:name=>gem_name, :merge=>true}
|
74
|
-
if
|
75
|
-
gem_info.merge!(
|
76
|
+
if options.is_a?(Hash)
|
77
|
+
gem_info.merge!(options)
|
76
78
|
else
|
77
|
-
gem_info[:version] =
|
79
|
+
gem_info[:version] = options
|
78
80
|
end
|
81
|
+
path = SimpleWorker::Service.get_gem_path(gem_info)
|
82
|
+
SimpleWorker.logger.debug "Gem path=#{path}"
|
83
|
+
if !path
|
84
|
+
raise "Gem path not found for #{gem_name}"
|
85
|
+
end
|
86
|
+
gem_info[:path] = path
|
79
87
|
@merged_gems << gem_info
|
80
|
-
require
|
88
|
+
puts 'before require ' + (options[:require] || gem_name)
|
89
|
+
require options[:require] || gem_name
|
90
|
+
puts 'required yo'
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
def unmerge_gem(gem_name)
|
95
|
+
gem_info = {:name=>gem_name}
|
96
|
+
@unmerged_gems << gem_info
|
81
97
|
end
|
82
98
|
|
83
|
-
|
99
|
+
#merge action_mailer mailers
|
84
100
|
def merge_mailer(mailer, params={})
|
85
101
|
check_for_file mailer
|
86
102
|
basename = File.basename(mailer, File.extname(mailer))
|
@@ -98,8 +114,8 @@ module SimpleWorker
|
|
98
114
|
SimpleWorker.logger.info "Merged folders! #{@merged_folders.inspect}"
|
99
115
|
end
|
100
116
|
|
101
|
-
|
102
|
-
|
117
|
+
# merges the specified files.
|
118
|
+
# todo: don't allow multiple files per merge, just one like require
|
103
119
|
def merge(*files)
|
104
120
|
files.each do |f|
|
105
121
|
f = check_for_file(f)
|
@@ -107,8 +123,8 @@ module SimpleWorker
|
|
107
123
|
end
|
108
124
|
end
|
109
125
|
|
110
|
-
|
111
|
-
|
126
|
+
# Opposite of merge, this will omit the files you specify from being merged in. Useful in Rails apps
|
127
|
+
# where a lot of things are auto-merged by default like your models.
|
112
128
|
def unmerge(*files)
|
113
129
|
files.each do |f|
|
114
130
|
f = check_for_file(f)
|
@@ -121,11 +137,11 @@ module SimpleWorker
|
|
121
137
|
s[-suffix.length, suffix.length] == suffix
|
122
138
|
end
|
123
139
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
140
|
+
# Use this to merge in other workers. These are treated differently the normal merged files because
|
141
|
+
# they will be uploaded separately and treated as distinctly separate workers.
|
142
|
+
#
|
143
|
+
# file: This is the path to the file, just like merge.
|
144
|
+
# class_name: eg: 'MyWorker'.
|
129
145
|
def merge_worker(file, class_name)
|
130
146
|
# puts 'merge_worker in ' + self.name
|
131
147
|
merge(file)
|
@@ -154,7 +170,7 @@ module SimpleWorker
|
|
154
170
|
self.class.instance_variable_defined?(:@uploaded) && self.class.instance_variable_get(:@uploaded)
|
155
171
|
end
|
156
172
|
|
157
|
-
|
173
|
+
# Call this if you want to run locally and get some extra features from this gem like global attributes.
|
158
174
|
def run_local
|
159
175
|
# puts 'run_local'
|
160
176
|
set_auto_attributes
|
@@ -200,15 +216,15 @@ module SimpleWorker
|
|
200
216
|
queue(options)
|
201
217
|
end
|
202
218
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
219
|
+
# Call this to queue up your job to SimpleWorker cloud.
|
220
|
+
# options:
|
221
|
+
# :priority => 0, 1 or 2. Default is 0.
|
222
|
+
# :recursive => true/false. Default is false. If you queue up a worker that is the same class as the currently
|
223
|
+
# running worker, it will be rejected unless you set this explicitly so we know you meant to do it.
|
208
224
|
def queue(options={})
|
209
225
|
# puts 'in queue'
|
210
226
|
set_auto_attributes
|
211
|
-
upload_if_needed
|
227
|
+
upload_if_needed(options)
|
212
228
|
|
213
229
|
response = SimpleWorker.service.queue(self.class.name, sw_get_data, options)
|
214
230
|
# puts 'queue response=' + response.inspect
|
@@ -217,6 +233,7 @@ module SimpleWorker
|
|
217
233
|
response
|
218
234
|
end
|
219
235
|
|
236
|
+
# Receive the status of your worker.
|
220
237
|
def status
|
221
238
|
check_service
|
222
239
|
if task_id
|
@@ -240,9 +257,9 @@ module SimpleWorker
|
|
240
257
|
false
|
241
258
|
end
|
242
259
|
|
243
|
-
|
244
|
-
|
245
|
-
|
260
|
+
# will return after job has completed or errored out.
|
261
|
+
# Returns status.
|
262
|
+
# todo: add a :timeout option
|
246
263
|
def wait_until_complete
|
247
264
|
check_service
|
248
265
|
tries = 0
|
@@ -264,19 +281,20 @@ module SimpleWorker
|
|
264
281
|
upload_if_needed
|
265
282
|
end
|
266
283
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
284
|
+
#
|
285
|
+
# schedule: hash of scheduling options that can include:
|
286
|
+
# Required:
|
287
|
+
# - start_at: Time of first run - DateTime or Time object.
|
288
|
+
# Optional:
|
289
|
+
# - run_every: Time in seconds between runs. If ommitted, task will only run once.
|
290
|
+
# - delay_type: Fixed Rate or Fixed Delay. Default is fixed_delay.
|
291
|
+
# - end_at: Scheduled task will stop running after this date (optional, if ommitted, runs forever or until cancelled)
|
292
|
+
# - run_times: Task will run exactly :run_times. For instance if :run_times is 5, then the task will run 5 times.
|
293
|
+
# - name: Provide a name for the schedule, defaults to class name. Use this if you want more than one schedule per worker class.
|
294
|
+
#
|
277
295
|
def schedule(schedule)
|
278
296
|
set_global_attributes
|
279
|
-
upload_if_needed
|
297
|
+
upload_if_needed(schedule)
|
280
298
|
|
281
299
|
response = SimpleWorker.service.schedule(self.class.name, sw_get_data, schedule)
|
282
300
|
# puts 'schedule response=' + response.inspect
|
@@ -288,12 +306,12 @@ module SimpleWorker
|
|
288
306
|
SimpleWorker.service.schedule_status(schedule_id)
|
289
307
|
end
|
290
308
|
|
291
|
-
|
309
|
+
# Retrieves the log for this worker from the SimpleWorker service.
|
292
310
|
def get_log
|
293
311
|
SimpleWorker.service.log(task_id)
|
294
312
|
end
|
295
313
|
|
296
|
-
|
314
|
+
# Callbacks for developer
|
297
315
|
def before_upload
|
298
316
|
|
299
317
|
end
|
@@ -337,31 +355,31 @@ module SimpleWorker
|
|
337
355
|
superclass = subclass
|
338
356
|
# Also get merged from subclasses up to SimpleWorker::Base
|
339
357
|
while (superclass = superclass.superclass)
|
340
|
-
|
358
|
+
#puts 'superclass=' + superclass.name
|
341
359
|
break if superclass.name == SimpleWorker::Base.name
|
342
360
|
super_merged = superclass.instance_variable_get(:@merged)
|
343
|
-
|
361
|
+
#puts 'merging caller file: ' + superclass.instance_variable_get(:@caller_file).inspect
|
344
362
|
super_merged << superclass.instance_variable_get(:@caller_file)
|
345
363
|
merged = super_merged + merged
|
346
|
-
|
364
|
+
#puts 'merged with superclass=' + merged.inspect
|
347
365
|
end
|
348
366
|
return merged, rfile, subclass
|
349
367
|
end
|
350
368
|
|
351
369
|
def self.extract_merged_workers(worker)
|
352
370
|
merged_workers = worker.class.instance_variable_get(:@merged_workers)
|
353
|
-
SimpleWorker.logger.debug
|
371
|
+
SimpleWorker.logger.debug "Looking for merged_workers in #{worker.class.name}: #{merged_workers.inspect}"
|
354
372
|
ret = []
|
355
373
|
if merged_workers && merged_workers.size > 0
|
356
374
|
merged_workers.each do |mw|
|
357
|
-
SimpleWorker.logger.debug
|
375
|
+
SimpleWorker.logger.debug "merged worker found in #{worker.class.name}: #{mw.inspect}"
|
358
376
|
ret << mw[0]
|
359
377
|
end
|
360
378
|
end
|
361
379
|
ret
|
362
380
|
end
|
363
381
|
|
364
|
-
def upload_if_needed
|
382
|
+
def upload_if_needed(options={})
|
365
383
|
check_service
|
366
384
|
SimpleWorker.service.check_config
|
367
385
|
|
@@ -369,7 +387,7 @@ module SimpleWorker
|
|
369
387
|
|
370
388
|
merged = self.class.instance_variable_get(:@merged)
|
371
389
|
|
372
|
-
|
390
|
+
# do merged_workers first because we need to get their subclasses and what not too
|
373
391
|
merged_workers = self.class.instance_variable_get(:@merged_workers)
|
374
392
|
if merged_workers && merged_workers.size > 0
|
375
393
|
SimpleWorker.logger.debug 'now uploading merged workers ' + merged_workers.inspect
|
@@ -408,7 +426,9 @@ module SimpleWorker
|
|
408
426
|
end
|
409
427
|
merged.uniq!
|
410
428
|
merged_mailers.uniq!
|
411
|
-
|
429
|
+
options_for_upload = {:merge=>merged, :unmerge=>unmerged, :merged_gems=>merged_gems, :merged_mailers=>merged_mailers, :merged_folders=>merged_folders}
|
430
|
+
options_for_upload[:name] = options[:name] if options[:name]
|
431
|
+
SimpleWorker.service.upload(rfile, subclass.name, options_for_upload)
|
412
432
|
self.class.instance_variable_set(:@uploaded, true)
|
413
433
|
else
|
414
434
|
SimpleWorker.logger.debug 'Already uploaded for ' + self.class.name
|
@@ -422,12 +442,17 @@ module SimpleWorker
|
|
422
442
|
data = {}
|
423
443
|
|
424
444
|
payload = {}
|
445
|
+
# todo: should put these down a layer, eg: payload[:attributes]
|
425
446
|
self.instance_variables.each do |iv|
|
426
447
|
payload[iv] = instance_variable_get(iv)
|
427
448
|
end
|
428
449
|
data[:attr_encoded] = Base64.encode64(payload.to_json)
|
429
450
|
data[:file_name] = File.basename(self.class.instance_variable_get(:@caller_file))
|
430
|
-
|
451
|
+
if defined?(Rails)
|
452
|
+
data[:rails] = {}
|
453
|
+
data[:rails]['env'] = Rails.env
|
454
|
+
data[:rails]['version'] = Rails.version
|
455
|
+
end
|
431
456
|
config_data = SimpleWorker.config.get_atts_to_send
|
432
457
|
data[:sw_config] = config_data
|
433
458
|
return data
|
data/lib/simple_worker/config.rb
CHANGED
@@ -13,7 +13,6 @@ module SimpleWorker
|
|
13
13
|
attr_accessor :config
|
14
14
|
|
15
15
|
def initialize(access_key, secret_key, options={})
|
16
|
-
SimpleWorker.logger.info 'Starting SimpleWorker::Service...'
|
17
16
|
if options[:config]
|
18
17
|
self.config = options[:config]
|
19
18
|
else
|
@@ -24,14 +23,16 @@ module SimpleWorker
|
|
24
23
|
end
|
25
24
|
super("http://api.simpleworker.com/api/", access_key, secret_key, options)
|
26
25
|
self.host = self.config.host if self.config && self.config.host
|
26
|
+
SimpleWorker.logger.info 'SimpleWorker initialized.'
|
27
27
|
end
|
28
28
|
|
29
29
|
# Options:
|
30
30
|
# - :callback_url
|
31
31
|
# - :merge => array of files to merge in with this file
|
32
32
|
def upload(filename, class_name, options={})
|
33
|
+
name = options[:name] || class_name
|
33
34
|
# puts "Uploading #{class_name}"
|
34
|
-
|
35
|
+
# check whether it should upload again
|
35
36
|
tmp = Dir.tmpdir()
|
36
37
|
md5file = "simple_worker_#{class_name.gsub("::", ".")}_#{access_key[0, 8]}.md5"
|
37
38
|
existing_md5 = nil
|
@@ -46,33 +47,25 @@ module SimpleWorker
|
|
46
47
|
SimpleWorker.logger.info "Uploading #{class_name}, code modified."
|
47
48
|
File.open(f, 'w') { |f| f.write(md5) }
|
48
49
|
new_code = true
|
50
|
+
# todo: delete md5 file if error occurs during upload process
|
49
51
|
else
|
50
52
|
# puts "#{class_name}: same code, not uploading"
|
51
53
|
return
|
52
54
|
end
|
53
55
|
|
54
|
-
|
55
56
|
zip_filename = build_merged_file(filename, options[:merge], options[:unmerge], options[:merged_gems], options[:merged_mailers], options[:merged_folders])
|
56
|
-
|
57
|
-
# sys.classes[subclass].__file__
|
58
|
-
# puts '__FILE__=' + Base.subclass.__file__.to_s
|
59
|
-
# puts "new md5=" + md5
|
60
|
-
|
57
|
+
SimpleWorker.logger.info 'file size to upload: ' + File.size(zip_filename).to_s
|
61
58
|
|
62
59
|
if new_code
|
63
|
-
# mystring = nil
|
64
|
-
# file = File.open(filename, "r") do |f|
|
65
|
-
# mystring = f.read
|
66
|
-
# end
|
67
|
-
# mystring = Base64.encode64(mystring)
|
68
|
-
# puts 'code=' + mystring
|
69
60
|
options = {
|
70
61
|
"class_name"=>class_name,
|
71
|
-
"name"=>
|
62
|
+
"name"=>name,
|
72
63
|
"file_name"=> File.basename(filename)
|
73
64
|
}
|
74
65
|
#puts 'options for upload=' + options.inspect
|
66
|
+
SimpleWorker.logger.info "Uploading now..."
|
75
67
|
ret = post_file("code/put", File.new(zip_filename), options)
|
68
|
+
SimpleWorker.logger.info "Done uploading."
|
76
69
|
ret
|
77
70
|
end
|
78
71
|
end
|
@@ -82,8 +75,9 @@ module SimpleWorker
|
|
82
75
|
JSON.parse(hash["gems"])
|
83
76
|
end
|
84
77
|
|
85
|
-
def get_gem_path(gem_info)
|
86
|
-
gem_name =(gem_info[:require] || gem_info[:name].match(/^[a-zA-Z0-9\-_]+/)[0])
|
78
|
+
def self.get_gem_path(gem_info)
|
79
|
+
# gem_name =(gem_info[:require] || gem_info[:name].match(/^[a-zA-Z0-9\-_]+/)[0])
|
80
|
+
gem_name =(gem_info[:name].match(/^[a-zA-Z0-9\-_]+/)[0])
|
87
81
|
puts "Searching for #{gem_name}..."
|
88
82
|
gems= Gem::Specification.respond_to?(:each) ? Gem::Specification.find_all_by_name(gem_name) : Gem::GemPathSearcher.new.find_all(gem_name)
|
89
83
|
# gems = searcher.init_gemspecs.select { |gem| gem.name==gem_name }
|
@@ -91,14 +85,15 @@ module SimpleWorker
|
|
91
85
|
gems = gems.select { |g| g.version.version==gem_info[:version] } if gem_info[:version]
|
92
86
|
if !gems.empty?
|
93
87
|
gem = gems.first
|
94
|
-
gem.full_gem_path
|
88
|
+
gem.full_gem_path
|
95
89
|
else
|
96
|
-
|
90
|
+
SimpleWorker.logger.warn "Gem file was not found for #{gem_name}, continuing anyways."
|
91
|
+
return nil
|
97
92
|
end
|
98
93
|
end
|
99
94
|
|
100
|
-
def build_merged_file(filename, merge, unmerge, merged_gems, merged_mailers,merged_folders)
|
101
|
-
# unless (merge && merge.size > 0) || (
|
95
|
+
def build_merged_file(filename, merge, unmerge, merged_gems, merged_mailers, merged_folders)
|
96
|
+
# unless (merge && merge.size > 0) || (rged_gems && merged_gems.size > 0)
|
102
97
|
# return filename
|
103
98
|
# end
|
104
99
|
merge = merge.nil? ? [] : merge.dup
|
@@ -111,20 +106,47 @@ module SimpleWorker
|
|
111
106
|
merge.uniq!
|
112
107
|
tmp_file = File.join(Dir.tmpdir(), File.basename(filename))
|
113
108
|
File.open(tmp_file, "w") do |f|
|
109
|
+
# add some rails stuff if using Rails
|
110
|
+
if defined?(Rails)
|
111
|
+
f.write "module Rails
|
112
|
+
def self.version
|
113
|
+
'#{Rails.version}'
|
114
|
+
end
|
115
|
+
def self.env
|
116
|
+
'#{Rails.env}'
|
117
|
+
end
|
118
|
+
end
|
119
|
+
"
|
120
|
+
|
121
|
+
end
|
114
122
|
if SimpleWorker.config.extra_requires
|
115
123
|
SimpleWorker.config.extra_requires.each do |r|
|
116
124
|
f.write "require '#{r}'\n"
|
117
125
|
end
|
118
126
|
end
|
119
127
|
if merged_mailers && !merged_mailers.empty?
|
128
|
+
# todo: isn't 'action_mailer already required in railtie?
|
120
129
|
f.write "require 'action_mailer'\n"
|
121
130
|
f.write "ActionMailer::Base.prepend_view_path('templates')\n"
|
122
131
|
end
|
123
132
|
if SimpleWorker.config.auto_merge
|
124
133
|
if SimpleWorker.config.gems
|
125
134
|
SimpleWorker.config.gems.each do |gem|
|
126
|
-
|
127
|
-
f.write "
|
135
|
+
puts "Bundling gem #{gem[:name]}..."
|
136
|
+
f.write "$LOAD_PATH << File.join(File.dirname(__FILE__), '/gems/#{gem[:name]}/lib')\n" if gem[:merge]
|
137
|
+
# unless gem[:no_require]
|
138
|
+
puts 'writing requires: ' + gem[:require].inspect
|
139
|
+
if gem[:require].nil?
|
140
|
+
gem[:require] = []
|
141
|
+
elsif gem[:require].is_a?(String)
|
142
|
+
gem[:require] = [gem[:require]]
|
143
|
+
end
|
144
|
+
puts gem[:require].inspect
|
145
|
+
gem[:require].each do |r|
|
146
|
+
puts 'adding require to file ' + r.to_s
|
147
|
+
f.write "require '#{r}'\n"
|
148
|
+
end
|
149
|
+
# end
|
128
150
|
end
|
129
151
|
end
|
130
152
|
if SimpleWorker.config.models
|
@@ -145,8 +167,8 @@ module SimpleWorker
|
|
145
167
|
# puts "merge after uniq! " + merge.inspect
|
146
168
|
|
147
169
|
fname2 = tmp_file + ".zip"
|
148
|
-
# puts 'fname2=' + fname2
|
149
|
-
# puts 'merged_file_array=' + merge.inspect
|
170
|
+
# puts 'fname2=' + fname2
|
171
|
+
# puts 'merged_file_array=' + merge.inspect
|
150
172
|
#File.open(fname2, "w") do |f|
|
151
173
|
File.delete(fname2) if File.exist?(fname2)
|
152
174
|
Zip::ZipFile.open(fname2, 'w') do |f|
|
@@ -154,27 +176,35 @@ module SimpleWorker
|
|
154
176
|
merged_gems.each do |gem|
|
155
177
|
next unless gem[:merge]
|
156
178
|
# puts 'gem=' + gem.inspect
|
157
|
-
path = get_gem_path(gem)
|
179
|
+
path = gem[:path] # get_gem_path(gem)
|
158
180
|
if path
|
159
181
|
SimpleWorker.logger.debug "Collecting gem #{path}"
|
160
|
-
Dir["#{path}/**/**"].each do |file|
|
182
|
+
Dir["#{path}/*", "#{path}/lib/**/**"].each do |file|
|
183
|
+
# todo: could check if directory and it not lib, skip it
|
184
|
+
puts 'file=' + file.inspect
|
161
185
|
# puts 'gem2=' + gem.inspect
|
162
186
|
zdest = "gems/#{gem[:name]}/#{file.sub(path+'/', '')}"
|
163
187
|
# puts 'gem file=' + file.to_s
|
164
|
-
|
188
|
+
puts 'zdest=' + zdest
|
165
189
|
f.add(zdest, file)
|
166
190
|
end
|
167
191
|
else
|
168
|
-
|
192
|
+
if gem[:auto_merged]
|
193
|
+
# todo: should only continue if the gem was auto merged.
|
194
|
+
SimpleWorker.logger.warn "Gem #{gem[:name]} #{gem[:version]} was not found, continuing anyways."
|
195
|
+
else
|
196
|
+
raise "Gem #{gem[:name]} #{gem[:version]} was not found, continuing anyways."
|
197
|
+
end
|
198
|
+
|
169
199
|
end
|
170
200
|
end
|
171
|
-
|
201
|
+
end
|
172
202
|
if merged_folders && merged_folders.size > 0
|
173
203
|
merged_folders.each do |folder, files|
|
174
204
|
SimpleWorker.logger.debug "Collecting folder #{folder}"
|
175
205
|
if files and files.size>0
|
176
206
|
files.each do |file|
|
177
|
-
zdest = "#{Digest::MD5.hexdigest(folder)}/#{file.sub(':','_').sub('/','_')}"
|
207
|
+
zdest = "#{Digest::MD5.hexdigest(folder)}/#{file.sub(':', '_').sub('/', '_')}"
|
178
208
|
puts 'put file to=' + zdest
|
179
209
|
f.add(zdest, file)
|
180
210
|
end
|
@@ -227,10 +257,11 @@ module SimpleWorker
|
|
227
257
|
if !data.is_a?(Array)
|
228
258
|
data = [data]
|
229
259
|
end
|
230
|
-
|
260
|
+
name = options[:name] || class_name
|
231
261
|
hash_to_send = {}
|
232
262
|
hash_to_send["payload"] = data
|
233
263
|
hash_to_send["class_name"] = class_name
|
264
|
+
hash_to_send["name"] = name
|
234
265
|
hash_to_send["priority"] = options[:priority] if options[:priority]
|
235
266
|
hash_to_send["options"] = options
|
236
267
|
add_sw_params(hash_to_send)
|
@@ -245,10 +276,10 @@ module SimpleWorker
|
|
245
276
|
def queue_raw(class_name, data={})
|
246
277
|
params = nil
|
247
278
|
hash_to_send = data
|
248
|
-
hash_to_send["class_name"] = class_name
|
279
|
+
hash_to_send["class_name"] = class_name unless hash_to_send["class_name"]
|
280
|
+
hash_to_send["name"] = class_name unless hash_to_send["name"]
|
249
281
|
ret = post("queue/add", hash_to_send)
|
250
282
|
ret
|
251
|
-
|
252
283
|
end
|
253
284
|
|
254
285
|
#
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 0.7.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.7.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Travis Reeder
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-06 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: zip
|
@@ -70,9 +70,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
71
|
none: false
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: "0"
|
76
76
|
requirements: []
|
77
77
|
|
78
78
|
rubyforge_project:
|