backgroundrb-rails3 1.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.
Files changed (126) hide show
  1. data/.autotest +17 -0
  2. data/ChangeLog +50 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE +4 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README +22 -0
  7. data/Rakefile +128 -0
  8. data/TODO.org +5 -0
  9. data/app/controller/backgroundrb_status_controller.rb +6 -0
  10. data/backgroundrb-rails3.gemspec +219 -0
  11. data/config/backgroundrb.yml +11 -0
  12. data/doc/Rakefile +5 -0
  13. data/doc/config.yaml +2 -0
  14. data/doc/content/advanced/advanced.txt +76 -0
  15. data/doc/content/advanced/advanced.yaml +4 -0
  16. data/doc/content/bugs/bugs.txt +20 -0
  17. data/doc/content/bugs/bugs.yaml +5 -0
  18. data/doc/content/community/community.txt +36 -0
  19. data/doc/content/community/community.yaml +5 -0
  20. data/doc/content/content.txt +168 -0
  21. data/doc/content/content.yaml +5 -0
  22. data/doc/content/faq/faq.txt +41 -0
  23. data/doc/content/faq/faq.yaml +5 -0
  24. data/doc/content/rails/rails.txt +182 -0
  25. data/doc/content/rails/rails.yaml +5 -0
  26. data/doc/content/scheduling/scheduling.txt +166 -0
  27. data/doc/content/scheduling/scheduling.yaml +5 -0
  28. data/doc/content/workers/workers.txt +178 -0
  29. data/doc/content/workers/workers.yaml +5 -0
  30. data/doc/layouts/default/default.erb +56 -0
  31. data/doc/layouts/default/default.yaml +4 -0
  32. data/doc/lib/default.rb +7 -0
  33. data/doc/output/Assets/BG-Ad-Top.png +0 -0
  34. data/doc/output/Assets/BG-Body.png +0 -0
  35. data/doc/output/Assets/BG-Feed.png +0 -0
  36. data/doc/output/Assets/BG-Menu-Hover.png +0 -0
  37. data/doc/output/Assets/BG-Menu.png +0 -0
  38. data/doc/output/Assets/BG-Sidebar-Bottom.png +0 -0
  39. data/doc/output/Assets/Button-Feed.png +0 -0
  40. data/doc/output/images/bg-ad-top.png +0 -0
  41. data/doc/output/images/bg-body.png +0 -0
  42. data/doc/output/images/bg-feed.gif +0 -0
  43. data/doc/output/images/bg-footer.jpg +0 -0
  44. data/doc/output/images/bg-header.jpg +0 -0
  45. data/doc/output/images/bg-menu-hover.png +0 -0
  46. data/doc/output/images/bg-menu.png +0 -0
  47. data/doc/output/images/bg-sidebar-bottom.gif +0 -0
  48. data/doc/output/images/button-feed.png +0 -0
  49. data/doc/output/images/icon-comment.png +0 -0
  50. data/doc/output/images/more_icon.gif +0 -0
  51. data/doc/output/style.css +299 -0
  52. data/doc/page_defaults.yaml +13 -0
  53. data/doc/tasks/default.rake +3 -0
  54. data/doc/templates/default/default.txt +1 -0
  55. data/doc/templates/default/default.yaml +4 -0
  56. data/examples/backgroundrb.yml +25 -0
  57. data/examples/foo_controller.rb +48 -0
  58. data/examples/god_worker.rb +7 -0
  59. data/examples/worker_tests/god_worker_test.rb +8 -0
  60. data/examples/workers/error_worker.rb +17 -0
  61. data/examples/workers/foo_worker.rb +38 -0
  62. data/examples/workers/god_worker.rb +7 -0
  63. data/examples/workers/model_worker.rb +13 -0
  64. data/examples/workers/renewal_worker.rb +11 -0
  65. data/examples/workers/rss_worker.rb +26 -0
  66. data/examples/workers/server_worker.rb +31 -0
  67. data/examples/workers/world_worker.rb +12 -0
  68. data/examples/workers/xmpp_worker.rb +7 -0
  69. data/init.rb +7 -0
  70. data/install.rb +1 -0
  71. data/know_issues.org +5 -0
  72. data/lib/backgroundrb.rb +1 -0
  73. data/lib/backgroundrb/bdrb_client_helper.rb +8 -0
  74. data/lib/backgroundrb/bdrb_cluster_connection.rb +156 -0
  75. data/lib/backgroundrb/bdrb_config.rb +43 -0
  76. data/lib/backgroundrb/bdrb_conn_error.rb +29 -0
  77. data/lib/backgroundrb/bdrb_connection.rb +179 -0
  78. data/lib/backgroundrb/bdrb_job_queue.rb +79 -0
  79. data/lib/backgroundrb/bdrb_result.rb +19 -0
  80. data/lib/backgroundrb/bdrb_start_stop.rb +146 -0
  81. data/lib/backgroundrb/rails_worker_proxy.rb +181 -0
  82. data/lib/backgroundrb/railtie.rb +48 -0
  83. data/lib/generators/backgroundrb/bdrb_migration/USAGE +12 -0
  84. data/lib/generators/backgroundrb/bdrb_migration/bdrb_migration_generator.rb +15 -0
  85. data/lib/generators/backgroundrb/bdrb_migration/templates/migration.rb +27 -0
  86. data/lib/generators/backgroundrb/worker/USAGE +16 -0
  87. data/lib/generators/backgroundrb/worker/templates/unit_test.rb +12 -0
  88. data/lib/generators/backgroundrb/worker/templates/worker.rb +7 -0
  89. data/lib/generators/backgroundrb/worker/worker_generator.rb +14 -0
  90. data/lib/tasks/backgroundrb_tasks.rake +103 -0
  91. data/release_notes.org +48 -0
  92. data/release_points.org +46 -0
  93. data/script/backgroundrb +52 -0
  94. data/script/bdrb_test_helper.rb +99 -0
  95. data/script/load_worker_env.rb +31 -0
  96. data/script/monitrc +25 -0
  97. data/server/backgroundrb_server.rb +12 -0
  98. data/server/lib/bdrb_result_storage.rb +62 -0
  99. data/server/lib/bdrb_server_helper.rb +24 -0
  100. data/server/lib/bdrb_thread_pool.rb +127 -0
  101. data/server/lib/cron_trigger.rb +197 -0
  102. data/server/lib/invalid_dump_error.rb +4 -0
  103. data/server/lib/log_worker.rb +25 -0
  104. data/server/lib/master_proxy.rb +140 -0
  105. data/server/lib/master_worker.rb +187 -0
  106. data/server/lib/meta_worker.rb +432 -0
  107. data/server/lib/trigger.rb +34 -0
  108. data/test/bdrb_client_test_helper.rb +5 -0
  109. data/test/bdrb_test_helper.rb +35 -0
  110. data/test/client/backgroundrb.yml +17 -0
  111. data/test/client/test_bdrb_client_helper.rb +13 -0
  112. data/test/client/test_bdrb_cluster_connection.rb +162 -0
  113. data/test/client/test_bdrb_config.rb +20 -0
  114. data/test/client/test_bdrb_connection.rb +29 -0
  115. data/test/client/test_bdrb_job_queue.rb +63 -0
  116. data/test/client/test_worker_proxy.rb +130 -0
  117. data/test/server/test_cron_trigger.rb +281 -0
  118. data/test/server/test_master_proxy.rb +54 -0
  119. data/test/server/test_master_worker.rb +157 -0
  120. data/test/server/test_meta_worker.rb +281 -0
  121. data/test/server/test_result_storage.rb +14 -0
  122. data/test/socket_mocker.rb +34 -0
  123. data/test/workers/bar_worker.rb +10 -0
  124. data/test/workers/foo_worker.rb +10 -0
  125. data/uninstall.rb +1 -0
  126. metadata +345 -0
@@ -0,0 +1,281 @@
1
+ require File.join(File.dirname(__FILE__) + "/../bdrb_test_helper")
2
+ require "meta_worker"
3
+ require "chronic"
4
+
5
+ context "A Meta Worker should" do
6
+ module Kernel
7
+ def packet_dump data
8
+ t = Marshal.dump(data)
9
+ t.length.to_s.rjust(9,'0') + t
10
+ end
11
+ end
12
+ setup do
13
+ options = {:schedules =>
14
+ {
15
+ :proper_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
16
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
17
+ },
18
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
19
+ }
20
+ BDRB_CONFIG.set(options)
21
+
22
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
23
+
24
+ class ProperWorker < BackgrounDRb::MetaWorker
25
+ attr_accessor :outgoing_data
26
+ attr_accessor :incoming_data
27
+ set_worker_name :proper_worker
28
+ def send_data(data)
29
+ @outgoing_data = data
30
+ end
31
+
32
+ def start_reactor; end
33
+
34
+ def ivar(var)
35
+ instance_variable_get("@#{var}")
36
+ end
37
+ end
38
+ @meta_worker = ProperWorker.start_worker
39
+ end
40
+
41
+ specify "load appropriate db environment from config file" do
42
+ ENV["RAILS_ENV"] = BDRB_CONFIG[:backgroundrb][:environment]
43
+ @meta_worker.send(:load_rails_env)
44
+ ActiveRecord::Base.connection.current_database.should == "rails_sandbox_production"
45
+ end
46
+
47
+
48
+ specify "load appropriate schedule from config file" do
49
+ @meta_worker.my_schedule.should.not == nil
50
+ @meta_worker.my_schedule.should == {:barbar=>{:data=>"Hello World", :trigger_args=>"*/5 * * * * *"}}
51
+ trigger = @meta_worker.ivar(:worker_method_triggers)
52
+ trigger.should.not == nil
53
+ trigger[:barbar][:data].should == "Hello World"
54
+ end
55
+
56
+ specify "should load passed data and invoke methods" do
57
+ a = {:data=>{:worker_method=>"who", :arg=>"rails"}, :type=>:request, :result=>false, :client_signature=>9}
58
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
59
+ c = {:data=>{:job_key=>:start_message}, :type=>:get_result, :result=>true, :client_signature=>9}
60
+ t_request = "000000088\004\b{\t:\ttype:\frequest:\025client_signaturei\016:\vresultF:\tdata{\a:\022worker_method\"\bwho:\barg\"\nrails"
61
+ @meta_worker.expects(:receive_data).with(a).returns(nil)
62
+ @meta_worker.receive_internal_data(t_request)
63
+ end
64
+
65
+ specify "should invoke async tasks without sending results" do
66
+ a = {:data=>{:worker_method=>"who", :arg=>"rails",:job_key => "lol"}, :type=>:request, :result=>false, :client_signature=>9}
67
+ @meta_worker.expects(:who).with("rails").returns(nil)
68
+ @meta_worker.receive_internal_data(packet_dump(a))
69
+ Thread.current[:job_key].should == "lol"
70
+ end
71
+
72
+ specify "should invoke sync methods and return results back" do
73
+ class << @meta_worker
74
+ def baz args
75
+ "hello : #{args}"
76
+ end
77
+ end
78
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
79
+ @meta_worker.expects(:send_data).with({:data=>"hello : rails", :type=>:response, :result=>true, :client_signature=>9, :result_flag => "ok"}).returns("hello : rails")
80
+ @meta_worker.receive_internal_data(packet_dump(b))
81
+ Thread.current[:job_key].should == nil
82
+ end
83
+
84
+ specify "should invoke methods with and without args correctly" do
85
+ class << @meta_worker
86
+ attr_accessor :outgoing_data
87
+ def send_data data
88
+ @outgoing_data = data
89
+ end
90
+ end
91
+ b = {:data=> {:worker_method=>"baz", :arg => { :name => "bdrb",:age => 10} }, :type=>:request, :result=>true, :client_signature=>9 }
92
+ # @meta_worker.expects(:send_data).with({:data=>"hello : rails", :type=>:response, :result=>true, :client_signature=>9}).returns("hello : rails")
93
+ @meta_worker.expects(:baz).with({ :name => "bdrb",:age => 10}).returns("foo")
94
+ @meta_worker.receive_internal_data(packet_dump(b))
95
+ @meta_worker.outgoing_data[:data].should == "foo"
96
+ Thread.current[:job_key].should == nil
97
+ end
98
+
99
+ specify "for result request" do
100
+ class << @meta_worker
101
+ attr_accessor :t_result
102
+ def send_data data
103
+ @t_result = data
104
+ end
105
+ end
106
+ @meta_worker.cache[:start_message] = "helloworld"
107
+ c = {:data=>{:job_key=>:start_message}, :type=>:get_result, :result=>true, :client_signature=>9}
108
+ @meta_worker.receive_internal_data(packet_dump(c))
109
+ @meta_worker.t_result[:data].should == "helloworld"
110
+ end
111
+
112
+ specify "for results that cant be dumped" do
113
+ class << @meta_worker
114
+ def baz args
115
+ proc { "boy"}
116
+ end
117
+ def send_data input
118
+ packet_dump(input)
119
+ end
120
+ end
121
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
122
+ a = @meta_worker.receive_internal_data(packet_dump(b))
123
+ p a
124
+ Thread.current[:job_key].should == nil
125
+ end
126
+ end
127
+
128
+ context "For unix schedulers" do
129
+ specify "remove a task from schedule if end time is reached" do
130
+ options = {:schedules =>
131
+ {
132
+ :unix_worker => { :barbar => { :trigger_args =>
133
+ {
134
+ :start => (Time.now + 2.seconds).to_s,
135
+ :end => (Time.now + 10.seconds).to_s,
136
+ :repeat_interval => 2.seconds,
137
+ :data => "unix_worker"
138
+ }
139
+ }
140
+ },
141
+ },
142
+ :backgroundrb =>
143
+ {
144
+ :log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"
145
+ }
146
+ }
147
+ BDRB_CONFIG.set(options)
148
+
149
+ class UnixWorker < BackgrounDRb::MetaWorker
150
+ attr_accessor :outgoing_data
151
+ attr_accessor :incoming_data
152
+ set_worker_name :unix_worker
153
+ def send_data(data)
154
+ @outgoing_data = data
155
+ end
156
+
157
+ def start_reactor; end
158
+
159
+ def ivar(var)
160
+ instance_variable_get("@#{var}")
161
+ end
162
+ end
163
+ @meta_worker = UnixWorker.start_worker
164
+ @meta_worker.my_schedule.should.not == nil
165
+ @meta_worker.ivar(:worker_method_triggers).should.not == nil
166
+ @meta_worker.ivar(:worker_method_triggers)[:barbar].should.not == nil
167
+ end
168
+ end
169
+
170
+ context "Worker without names" do
171
+ specify "should throw an error on initialization" do
172
+ options = {:schedules =>
173
+ {
174
+ :foo_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
175
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
176
+ },
177
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
178
+ }
179
+ BDRB_CONFIG.set(options)
180
+
181
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
182
+
183
+ class BoyWorker < BackgrounDRb::MetaWorker
184
+ attr_accessor :outgoing_data
185
+ attr_accessor :incoming_data
186
+ def send_data(data)
187
+ @outgoing_data = data
188
+ end
189
+
190
+ def start_reactor; end
191
+ end
192
+ should.raise { @meta_worker = BoyWorker.start_worker }
193
+ end
194
+ end
195
+
196
+ context "Worker with options" do
197
+ specify "should load schedule from passed options" do
198
+ options = { :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}}
199
+ BDRB_CONFIG.set(options)
200
+
201
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
202
+
203
+ class CrapWorker < BackgrounDRb::MetaWorker
204
+ set_worker_name :crap_worker
205
+ set_no_auto_load true
206
+ attr_accessor :outgoing_data
207
+ attr_accessor :incoming_data
208
+ def send_data(data)
209
+ @outgoing_data = data
210
+ end
211
+
212
+ def start_reactor; end
213
+ def ivar(var); instance_variable_get("@#{var}"); end
214
+ end
215
+ write_end = mock()
216
+ read_end = mock()
217
+ worker_options = { :write_end => mock(),:read_end => mock(),
218
+ :options => {
219
+ :data => "hello", :schedule => {
220
+ :hello_world => { :trigger_args => "*/5 * * * * * *",
221
+ :data => "hello_world"
222
+ }
223
+ }
224
+ }
225
+ }
226
+ CrapWorker.any_instance.expects(:create).with("hello").returns(true)
227
+ @meta_worker = CrapWorker.start_worker(worker_options)
228
+ @meta_worker.my_schedule.should == {:hello_world=>{:data=>"hello_world", :trigger_args=>"*/5 * * * * * *"}}
229
+ end
230
+ end
231
+
232
+ context "For enqueued tasks" do
233
+ setup do
234
+ options = {:schedules =>
235
+ {
236
+ :proper_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
237
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
238
+ },
239
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
240
+ }
241
+ BDRB_CONFIG.set(options)
242
+
243
+ class BdrbJobQueue < ActiveRecord::Base; end
244
+ class QueueWorker < BackgrounDRb::MetaWorker
245
+ attr_accessor :outgoing_data
246
+ attr_accessor :incoming_data
247
+ set_worker_name :queue_worker
248
+ def send_data(data)
249
+ @outgoing_data = data
250
+ end
251
+
252
+ def start_reactor; end
253
+
254
+ def ivar(var)
255
+ instance_variable_get("@#{var}")
256
+ end
257
+ end
258
+ end
259
+
260
+ specify "should run enqueued tasks with arguments if they are there in the queue" do
261
+ @meta_worker = QueueWorker.start_worker
262
+ mocked_task = mock()
263
+ mocked_task.expects(:worker_method).returns(:barbar).times(2)
264
+ mocked_task.expects(:args).returns(Marshal.dump("hello"))
265
+ mocked_task.expects(:[]).returns(1).times(2)
266
+ @meta_worker.expects(:barbar).with("hello").returns(true)
267
+ BdrbJobQueue.expects(:find_next).with("queue_worker").returns(mocked_task)
268
+ @meta_worker.check_for_enqueued_tasks
269
+ end
270
+
271
+ specify "should run enqueued tasks without arguments if they are there in the queue" do
272
+ @meta_worker = QueueWorker.start_worker
273
+ mocked_task = mock()
274
+ mocked_task.expects(:[]).returns(1).times(2)
275
+ mocked_task.expects(:worker_method).returns(:barbar).times(2)
276
+ mocked_task.expects(:args).returns(nil)
277
+ @meta_worker.expects(:barbar)
278
+ BdrbJobQueue.expects(:find_next).with("queue_worker").returns(mocked_task)
279
+ @meta_worker.check_for_enqueued_tasks
280
+ end
281
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__) + "/..","bdrb_test_helper")
2
+
3
+ context "Result storage" do
4
+ setup do
5
+ @cache = BackgrounDRb::ResultStorage.new(:some_worker,:crap)
6
+ end
7
+
8
+ specify "should store result" do
9
+ @cache[:foo] = "Wow"
10
+ @cache[:foo].should == "Wow"
11
+ @cache.delete(:foo)
12
+ @cache[:foo].should == nil
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ require "socket"
2
+
3
+ class TCPSocket
4
+ attr_accessor :connection_status
5
+ attr_accessor :internal_buffer
6
+ def initialize ip,port
7
+ @internal_buffer = []
8
+ end
9
+
10
+ def trigger
11
+
12
+ end
13
+
14
+ def self.open server_ip
15
+
16
+ end
17
+
18
+ def setsockopt *args; end
19
+
20
+ def >> crap
21
+ @internal_buffer << Marshal.dump(crap)
22
+ end
23
+
24
+ def read
25
+ @internal_buffer.shift
26
+ end
27
+
28
+ def write crap; end
29
+
30
+
31
+ def close
32
+ @connection_status = :closed
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ class BarWorker < BackgrounDRb::MetaWorker
2
+ set_worker_name :bar_worker
3
+ reload_on_schedule true
4
+ def create
5
+
6
+ end
7
+ def do_job
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class FooWorker < BackgrounDRb::MetaWorker
2
+ set_worker_name :foo_worker
3
+ reload_on_schedule :true
4
+ def create args = nil
5
+ end
6
+
7
+ def barbar args
8
+ "lol"
9
+ end
10
+ end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,345 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: backgroundrb-rails3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ version: "1.1"
10
+ platform: ruby
11
+ authors:
12
+ - Matteo Latini
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-14 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 17
27
+ segments:
28
+ - 0
29
+ - 2
30
+ - 3
31
+ version: 0.2.3
32
+ type: :runtime
33
+ name: chronic
34
+ prerelease: false
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - "="
41
+ - !ruby/object:Gem::Version
42
+ hash: 5
43
+ segments:
44
+ - 0
45
+ - 1
46
+ - 15
47
+ version: 0.1.15
48
+ type: :runtime
49
+ name: packet
50
+ prerelease: false
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :development
63
+ name: shoulda
64
+ prerelease: false
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
77
+ version: 1.0.0
78
+ type: :development
79
+ name: bundler
80
+ prerelease: false
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ hash: 1
89
+ segments:
90
+ - 1
91
+ - 5
92
+ - 1
93
+ version: 1.5.1
94
+ type: :development
95
+ name: jeweler
96
+ prerelease: false
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ type: :development
109
+ name: rcov
110
+ prerelease: false
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 17
119
+ segments:
120
+ - 0
121
+ - 2
122
+ - 3
123
+ version: 0.2.3
124
+ type: :runtime
125
+ name: chronic
126
+ prerelease: false
127
+ version_requirements: *id007
128
+ - !ruby/object:Gem::Dependency
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 5
135
+ segments:
136
+ - 0
137
+ - 1
138
+ - 15
139
+ version: 0.1.15
140
+ type: :runtime
141
+ name: packet
142
+ prerelease: false
143
+ version_requirements: *id008
144
+ description: |-
145
+
146
+ BackgrounDRb is a Ruby job server and scheduler. Its main intent is to be used with Ruby on Rails applications for offloading long-running tasks.
147
+ Since a Rails application blocks while serving a request it is best to move long-running tasks off into a background process that is divorced from http request/response cycle.
148
+ email: mtylty@gmail.com
149
+ executables: []
150
+
151
+ extensions: []
152
+
153
+ extra_rdoc_files:
154
+ - ChangeLog
155
+ - LICENSE
156
+ - README
157
+ files:
158
+ - .autotest
159
+ - ChangeLog
160
+ - Gemfile
161
+ - LICENSE
162
+ - MIT-LICENSE
163
+ - README
164
+ - Rakefile
165
+ - TODO.org
166
+ - app/controller/backgroundrb_status_controller.rb
167
+ - backgroundrb-rails3.gemspec
168
+ - config/backgroundrb.yml
169
+ - doc/Rakefile
170
+ - doc/config.yaml
171
+ - doc/content/advanced/advanced.txt
172
+ - doc/content/advanced/advanced.yaml
173
+ - doc/content/bugs/bugs.txt
174
+ - doc/content/bugs/bugs.yaml
175
+ - doc/content/community/community.txt
176
+ - doc/content/community/community.yaml
177
+ - doc/content/content.txt
178
+ - doc/content/content.yaml
179
+ - doc/content/faq/faq.txt
180
+ - doc/content/faq/faq.yaml
181
+ - doc/content/rails/rails.txt
182
+ - doc/content/rails/rails.yaml
183
+ - doc/content/scheduling/scheduling.txt
184
+ - doc/content/scheduling/scheduling.yaml
185
+ - doc/content/workers/workers.txt
186
+ - doc/content/workers/workers.yaml
187
+ - doc/layouts/default/default.erb
188
+ - doc/layouts/default/default.yaml
189
+ - doc/lib/default.rb
190
+ - doc/output/Assets/BG-Ad-Top.png
191
+ - doc/output/Assets/BG-Body.png
192
+ - doc/output/Assets/BG-Feed.png
193
+ - doc/output/Assets/BG-Menu-Hover.png
194
+ - doc/output/Assets/BG-Menu.png
195
+ - doc/output/Assets/BG-Sidebar-Bottom.png
196
+ - doc/output/Assets/Button-Feed.png
197
+ - doc/output/images/bg-ad-top.png
198
+ - doc/output/images/bg-body.png
199
+ - doc/output/images/bg-feed.gif
200
+ - doc/output/images/bg-footer.jpg
201
+ - doc/output/images/bg-header.jpg
202
+ - doc/output/images/bg-menu-hover.png
203
+ - doc/output/images/bg-menu.png
204
+ - doc/output/images/bg-sidebar-bottom.gif
205
+ - doc/output/images/button-feed.png
206
+ - doc/output/images/icon-comment.png
207
+ - doc/output/images/more_icon.gif
208
+ - doc/output/style.css
209
+ - doc/page_defaults.yaml
210
+ - doc/tasks/default.rake
211
+ - doc/templates/default/default.txt
212
+ - doc/templates/default/default.yaml
213
+ - examples/backgroundrb.yml
214
+ - examples/foo_controller.rb
215
+ - examples/god_worker.rb
216
+ - examples/worker_tests/god_worker_test.rb
217
+ - examples/workers/error_worker.rb
218
+ - examples/workers/foo_worker.rb
219
+ - examples/workers/god_worker.rb
220
+ - examples/workers/model_worker.rb
221
+ - examples/workers/renewal_worker.rb
222
+ - examples/workers/rss_worker.rb
223
+ - examples/workers/server_worker.rb
224
+ - examples/workers/world_worker.rb
225
+ - examples/workers/xmpp_worker.rb
226
+ - init.rb
227
+ - install.rb
228
+ - know_issues.org
229
+ - lib/backgroundrb.rb
230
+ - lib/backgroundrb/bdrb_client_helper.rb
231
+ - lib/backgroundrb/bdrb_cluster_connection.rb
232
+ - lib/backgroundrb/bdrb_config.rb
233
+ - lib/backgroundrb/bdrb_conn_error.rb
234
+ - lib/backgroundrb/bdrb_connection.rb
235
+ - lib/backgroundrb/bdrb_job_queue.rb
236
+ - lib/backgroundrb/bdrb_result.rb
237
+ - lib/backgroundrb/bdrb_start_stop.rb
238
+ - lib/backgroundrb/rails_worker_proxy.rb
239
+ - lib/backgroundrb/railtie.rb
240
+ - lib/generators/backgroundrb/bdrb_migration/USAGE
241
+ - lib/generators/backgroundrb/bdrb_migration/bdrb_migration_generator.rb
242
+ - lib/generators/backgroundrb/bdrb_migration/templates/migration.rb
243
+ - lib/generators/backgroundrb/worker/USAGE
244
+ - lib/generators/backgroundrb/worker/templates/unit_test.rb
245
+ - lib/generators/backgroundrb/worker/templates/worker.rb
246
+ - lib/generators/backgroundrb/worker/worker_generator.rb
247
+ - lib/tasks/backgroundrb_tasks.rake
248
+ - release_notes.org
249
+ - release_points.org
250
+ - script/backgroundrb
251
+ - script/bdrb_test_helper.rb
252
+ - script/load_worker_env.rb
253
+ - script/monitrc
254
+ - server/backgroundrb_server.rb
255
+ - server/lib/bdrb_result_storage.rb
256
+ - server/lib/bdrb_server_helper.rb
257
+ - server/lib/bdrb_thread_pool.rb
258
+ - server/lib/cron_trigger.rb
259
+ - server/lib/invalid_dump_error.rb
260
+ - server/lib/log_worker.rb
261
+ - server/lib/master_proxy.rb
262
+ - server/lib/master_worker.rb
263
+ - server/lib/meta_worker.rb
264
+ - server/lib/trigger.rb
265
+ - test/bdrb_client_test_helper.rb
266
+ - test/bdrb_test_helper.rb
267
+ - test/client/backgroundrb.yml
268
+ - test/client/test_bdrb_client_helper.rb
269
+ - test/client/test_bdrb_cluster_connection.rb
270
+ - test/client/test_bdrb_config.rb
271
+ - test/client/test_bdrb_connection.rb
272
+ - test/client/test_bdrb_job_queue.rb
273
+ - test/client/test_worker_proxy.rb
274
+ - test/server/test_cron_trigger.rb
275
+ - test/server/test_master_proxy.rb
276
+ - test/server/test_master_worker.rb
277
+ - test/server/test_meta_worker.rb
278
+ - test/server/test_result_storage.rb
279
+ - test/socket_mocker.rb
280
+ - test/workers/bar_worker.rb
281
+ - test/workers/foo_worker.rb
282
+ - uninstall.rb
283
+ has_rdoc: true
284
+ homepage: http://github.com/mtylty/backgroundrb-rails3
285
+ licenses:
286
+ - MIT
287
+ post_install_message:
288
+ rdoc_options: []
289
+
290
+ require_paths:
291
+ - lib
292
+ required_ruby_version: !ruby/object:Gem::Requirement
293
+ none: false
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ hash: 3
298
+ segments:
299
+ - 0
300
+ version: "0"
301
+ required_rubygems_version: !ruby/object:Gem::Requirement
302
+ none: false
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ hash: 3
307
+ segments:
308
+ - 0
309
+ version: "0"
310
+ requirements: []
311
+
312
+ rubyforge_project:
313
+ rubygems_version: 1.3.7
314
+ signing_key:
315
+ specification_version: 3
316
+ summary: BackgrounDRb is a Ruby job server and scheduler.
317
+ test_files:
318
+ - examples/foo_controller.rb
319
+ - examples/god_worker.rb
320
+ - examples/worker_tests/god_worker_test.rb
321
+ - examples/workers/error_worker.rb
322
+ - examples/workers/foo_worker.rb
323
+ - examples/workers/god_worker.rb
324
+ - examples/workers/model_worker.rb
325
+ - examples/workers/renewal_worker.rb
326
+ - examples/workers/rss_worker.rb
327
+ - examples/workers/server_worker.rb
328
+ - examples/workers/world_worker.rb
329
+ - examples/workers/xmpp_worker.rb
330
+ - test/bdrb_client_test_helper.rb
331
+ - test/bdrb_test_helper.rb
332
+ - test/client/test_bdrb_client_helper.rb
333
+ - test/client/test_bdrb_cluster_connection.rb
334
+ - test/client/test_bdrb_config.rb
335
+ - test/client/test_bdrb_connection.rb
336
+ - test/client/test_bdrb_job_queue.rb
337
+ - test/client/test_worker_proxy.rb
338
+ - test/server/test_cron_trigger.rb
339
+ - test/server/test_master_proxy.rb
340
+ - test/server/test_master_worker.rb
341
+ - test/server/test_meta_worker.rb
342
+ - test/server/test_result_storage.rb
343
+ - test/socket_mocker.rb
344
+ - test/workers/bar_worker.rb
345
+ - test/workers/foo_worker.rb