genki-background_fu 1.0.8.2 → 1.0.9
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/History.txt +6 -2
- data/README.txt +2 -1
- data/background-fu.gemspec +3 -3
- data/generators/background/templates/background.rb +1 -1
- data/generators/background/templates/scaffold/_form.html.erb +10 -0
- data/generators/background/templates/scaffold/application_controller.rb +2 -0
- data/generators/background/templates/scaffold/new.html.erb +2 -0
- data/lib/background_fu.rb +1 -1
- data/lib/job/bonus_features.rb +7 -8
- data/lib/job.rb +15 -2
- data/rails/init.rb +1 -2
- metadata +5 -2
data/History.txt
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
===
|
1
|
+
=== Master / 2008-11-06
|
2
2
|
|
3
|
-
*
|
3
|
+
* Allow concurrency is deprecated in Rails 2.2 so we check if we can use it. (thanks fixlr).
|
4
|
+
|
5
|
+
=== 1.0.9 / 2008-10-22
|
6
|
+
|
7
|
+
* Merged a few important fixes from Keith Morrison. Bumped version, fixed gemspec (thanks 森山 誠二郎). Closes #4. [Keith Morrison, 森山 誠二郎, ncr]
|
4
8
|
|
5
9
|
=== Master / 2008-07-31
|
6
10
|
|
data/README.txt
CHANGED
@@ -17,13 +17,14 @@ Background tasks in Ruby On Rails made dead simple.
|
|
17
17
|
* Clean and straightforward approach (database-based priority queue).
|
18
18
|
* Uses database table (migration included) to store jobs reliably.
|
19
19
|
* Capistrano tasks included.
|
20
|
-
* Generators with migrations and example views included (to be used with concurrency enabled).
|
20
|
+
* Generators with migrations and example views (Prototype required) included (to be used with concurrency enabled).
|
21
21
|
* Multiple worker daemons available.
|
22
22
|
* Easy to deploy in distributed environments.
|
23
23
|
* Enables prioritizing and simple scheduling.
|
24
24
|
* Optional worker monitoring (good for AJAX progress bars).
|
25
25
|
* Proven its stability and reliability in production use.
|
26
26
|
|
27
|
+
|
27
28
|
== SYNOPSIS:
|
28
29
|
|
29
30
|
ruby ./script/generate background
|
data/background-fu.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{background_fu}
|
3
|
-
s.version = "1.0.
|
3
|
+
s.version = "1.0.9"
|
4
4
|
|
5
5
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Jacek Becela"]
|
9
|
-
s.date = %q{2008-
|
9
|
+
s.date = %q{2008-10-22}
|
10
10
|
s.description = %q{Background tasks in Ruby On Rails made dead simple.}
|
11
11
|
s.email = ["jacek.becela@gmail.com"]
|
12
12
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
13
|
-
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "background-fu.gemspec", "generators/background/USAGE", "generators/background/background_generator.rb", "generators/background/templates/background.rb", "generators/background/templates/background_ctl", "generators/background/templates/daemons", "generators/background/templates/daemons.yml", "generators/background/templates/example_monitored_worker.rb", "generators/background/templates/example_worker.rb", "generators/background/templates/migration.rb", "generators/background/templates/scaffold/_job.html.erb", "generators/background/templates/scaffold/_job_deleted.html.erb", "generators/background/templates/scaffold/_progress_indicator.html.erb", "generators/background/templates/scaffold/background_fu.css", "generators/background/templates/scaffold/index.html.erb", "generators/background/templates/scaffold/jobs.html.erb", "generators/background/templates/scaffold/jobs_controller.rb", "generators/background/templates/scaffold/jobs_helper.rb", "lib/background_fu.rb", "lib/background_fu/worker_monitoring.rb", "lib/job.rb", "lib/job/bonus_features.rb", "rails/init.rb"]
|
13
|
+
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "background-fu.gemspec", "generators/background/USAGE", "generators/background/background_generator.rb", "generators/background/templates/background.rb", "generators/background/templates/background_ctl", "generators/background/templates/daemons", "generators/background/templates/daemons.yml", "generators/background/templates/example_monitored_worker.rb", "generators/background/templates/example_worker.rb", "generators/background/templates/migration.rb", "generators/background/templates/scaffold/_form.html.erb", "generators/background/templates/scaffold/_job.html.erb", "generators/background/templates/scaffold/_job_deleted.html.erb", "generators/background/templates/scaffold/_progress_indicator.html.erb", "generators/background/templates/scaffold/application_controller.rb", "generators/background/templates/scaffold/background_fu.css", "generators/background/templates/scaffold/index.html.erb", "generators/background/templates/scaffold/jobs.html.erb", "generators/background/templates/scaffold/jobs_controller.rb", "generators/background/templates/scaffold/jobs_helper.rb", "generators/background/templates/scaffold/new.html.erb", "lib/background_fu.rb", "lib/background_fu/worker_monitoring.rb", "lib/job.rb", "lib/job/bonus_features.rb", "rails/init.rb"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://github.com/ncr/background-fu}
|
16
16
|
s.rdoc_options = ["--main", "README.txt"]
|
@@ -11,7 +11,7 @@ else
|
|
11
11
|
end
|
12
12
|
|
13
13
|
loop do
|
14
|
-
if job = Job.find(:first, :conditions => ["state='pending' and start_at <= ?", Time.now
|
14
|
+
if job = Job.find(:first, :conditions => ["state='pending' and start_at <= ?", Time.now], :order => "priority desc, start_at asc")
|
15
15
|
job.get_done!
|
16
16
|
else
|
17
17
|
RAILS_DEFAULT_LOGGER.info("BackgroundFu: Waiting for jobs...")
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= error_messages_for :job %>
|
2
|
+
<% form_for(:job, :html => {:class => "job"}) do |f| %>
|
3
|
+
<%= f.label :worker_class %><br />
|
4
|
+
<%= f.text_field :worker_class, :class => "worker-class" %><br />
|
5
|
+
<%= f.label :worker_method %><br />
|
6
|
+
<%= f.text_field :worker_method, :class => "worker-method" %><br />
|
7
|
+
<%= f.label :args, "Args - each line (including empty) is interpreted as a string argument" %><br />
|
8
|
+
<%= f.text_area :args %><br />
|
9
|
+
<%= f.submit "Enqueue", :class => "button" %>
|
10
|
+
<% end %>
|
data/lib/background_fu.rb
CHANGED
data/lib/job/bonus_features.rb
CHANGED
@@ -16,6 +16,7 @@ module Job::BonusFeatures
|
|
16
16
|
invoke_worker_without_threads; nil
|
17
17
|
end
|
18
18
|
|
19
|
+
self.reload
|
19
20
|
self.state = res ? "stopped" : "finished"
|
20
21
|
end
|
21
22
|
|
@@ -44,7 +45,7 @@ module Job::BonusFeatures
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
#
|
48
|
+
# Overridden because of new "stopped" state.
|
48
49
|
def restart_with_threads!
|
49
50
|
if stopped? || failed?
|
50
51
|
update_attributes!(
|
@@ -57,13 +58,11 @@ module Job::BonusFeatures
|
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
60
|
-
#
|
61
|
-
# is
|
61
|
+
# Monitors the worker and updates the job progress. If the job's status
|
62
|
+
# is changed to 'stopping', the worker is requested to stop.
|
62
63
|
def monitor_worker
|
63
64
|
Thread.new do
|
64
|
-
|
65
|
-
# 2. !Job.find(id).stopping? - check if someone ordered stopping the job.
|
66
|
-
while(running? && !Job.find(id).stopping?)
|
65
|
+
while running? && !Job.find(id).stopping?
|
67
66
|
current_progress = @worker.instance_variable_get("@progress")
|
68
67
|
|
69
68
|
if current_progress == progress
|
@@ -74,11 +73,11 @@ module Job::BonusFeatures
|
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
77
|
-
|
78
|
-
if(Job.find(id).stopping?)
|
76
|
+
if Job.find(id).stopping?
|
79
77
|
@worker.instance_variable_set("@stopping", true)
|
80
78
|
end
|
81
79
|
end
|
80
|
+
|
82
81
|
logger.info("BackgroundFu: Job monitoring started. Job(id: #{id}).")
|
83
82
|
end
|
84
83
|
|
data/lib/job.rb
CHANGED
@@ -25,6 +25,19 @@ class Job < ActiveRecord::Base
|
|
25
25
|
|
26
26
|
job
|
27
27
|
end
|
28
|
+
|
29
|
+
def self.enqueue_with_delay!(delay_in_minutes, worker_class, worker_method, *args)
|
30
|
+
job = create!(
|
31
|
+
:start_at => Time.now + (delay_in_minutes * 60),
|
32
|
+
:worker_class => worker_class.to_s,
|
33
|
+
:worker_method => worker_method.to_s,
|
34
|
+
:args => args
|
35
|
+
)
|
36
|
+
|
37
|
+
logger.info("BackgroundFu: Job enqueued with #{delay_in_minutes} minute delay. Job(id: #{job.id}, worker: #{worker_class}, method: #{worker_method}, argc: #{args.size}).")
|
38
|
+
|
39
|
+
job
|
40
|
+
end
|
28
41
|
|
29
42
|
# Invoked by a background daemon.
|
30
43
|
def get_done!
|
@@ -50,7 +63,7 @@ class Job < ActiveRecord::Base
|
|
50
63
|
end
|
51
64
|
|
52
65
|
def initialize_worker
|
53
|
-
update_attributes!(:started_at => Time.now
|
66
|
+
update_attributes!(:started_at => Time.now, :state => "running")
|
54
67
|
@worker = worker_class.constantize.new
|
55
68
|
logger.info("BackgroundFu: Job initialized. Job(id: #{id}).")
|
56
69
|
end
|
@@ -107,7 +120,7 @@ class Job < ActiveRecord::Base
|
|
107
120
|
def setup_start_at
|
108
121
|
return unless start_at.blank?
|
109
122
|
|
110
|
-
self.start_at = Time.now
|
123
|
+
self.start_at = Time.now
|
111
124
|
end
|
112
125
|
|
113
126
|
end
|
data/rails/init.rb
CHANGED
@@ -3,9 +3,8 @@ require 'background_fu/worker_monitoring'
|
|
3
3
|
require 'job'
|
4
4
|
require 'job/bonus_features'
|
5
5
|
|
6
|
-
# ActiveSupport::Dependencies will be here after edge becomes stable.
|
7
6
|
ActiveSupport::Dependencies.load_paths << "#{RAILS_ROOT}/lib/workers"
|
8
7
|
|
9
|
-
if ActiveRecord::Base.allow_concurrency
|
8
|
+
if ActiveRecord::Base.method_defined?(:allow_concurrency) and ActiveRecord::Base.allow_concurrency
|
10
9
|
Job.send!(:include, Job::BonusFeatures)
|
11
10
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genki-background_fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacek Becela
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-22 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -47,14 +47,17 @@ files:
|
|
47
47
|
- generators/background/templates/example_monitored_worker.rb
|
48
48
|
- generators/background/templates/example_worker.rb
|
49
49
|
- generators/background/templates/migration.rb
|
50
|
+
- generators/background/templates/scaffold/_form.html.erb
|
50
51
|
- generators/background/templates/scaffold/_job.html.erb
|
51
52
|
- generators/background/templates/scaffold/_job_deleted.html.erb
|
52
53
|
- generators/background/templates/scaffold/_progress_indicator.html.erb
|
54
|
+
- generators/background/templates/scaffold/application_controller.rb
|
53
55
|
- generators/background/templates/scaffold/background_fu.css
|
54
56
|
- generators/background/templates/scaffold/index.html.erb
|
55
57
|
- generators/background/templates/scaffold/jobs.html.erb
|
56
58
|
- generators/background/templates/scaffold/jobs_controller.rb
|
57
59
|
- generators/background/templates/scaffold/jobs_helper.rb
|
60
|
+
- generators/background/templates/scaffold/new.html.erb
|
58
61
|
- lib/background_fu.rb
|
59
62
|
- lib/background_fu/worker_monitoring.rb
|
60
63
|
- lib/job.rb
|