loops 2.0.6 → 2.0.7

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.
@@ -35,26 +35,18 @@ you're going to like it.
35
35
 
36
36
  == How to install?
37
37
 
38
- There are two options when approaching db-charmer installation:
38
+ Add the loops gem to your +Gemfile+:
39
39
 
40
- * using the gem (recommended)
41
- * install as a Rails plugin
40
+ gem 'loops'
42
41
 
43
- To install as a gem, add this to your environment.rb:
42
+ And then run +bundle+ command.
44
43
 
45
- config.gem 'loops'
46
-
47
- And then run the command:
48
-
49
- sudo rake gems:install
50
-
51
- To install loops as a Rails plugin you need to do rhw following:
44
+ To install loops as a Rails plugin you need to do the following:
52
45
 
53
46
  ./script/plugin install git://github.com/kovyrin/loops.git
54
47
 
55
- This will install the whole package in your vendor/plugins directory.
56
- For merb applications, just check out the code and place it to the vendor/plugins directory.
57
-
48
+ This will install the whole package in your +vendor/plugins+ directory.
49
+ For merb applications, just check out the code and place it to the +vendor/plugins+ directory.
58
50
 
59
51
  After you are done with the installation, you need to generate binary and configuration
60
52
  files by running:
@@ -62,10 +54,10 @@ files by running:
62
54
  ./script/generate loops
63
55
 
64
56
  This will create the following list of files:
65
- * <tt>./script/loops</tt> - binary file that will be used to manage your loops
66
- * <tt>./config/loops.yml</tt> - example configuration file
67
- * <tt>./app/loops/simple.rb</tt> - REALLY simple loop example
68
- * <tt>./app/loops/queue_loop.rb</tt> - simple ActiveMQ queue worker
57
+ * <tt>./script/loops</tt> -- binary file that will be used to manage your loops
58
+ * <tt>./config/loops.yml</tt> -- example configuration file
59
+ * <tt>./app/loops/simple.rb</tt> -- REALLY simple loop example
60
+ * <tt>./app/loops/queue_loop.rb</tt> -- simple ActiveMQ queue worker
69
61
 
70
62
 
71
63
  == How to use?
@@ -177,12 +169,18 @@ initialize_loop raises an error, then the loop is not started and the error is l
177
169
 
178
170
  We use monit to keep loop monitors runnings. You could use something like this in your configs:
179
171
 
172
+ check process loop-slow_logs with pidfile /your/project/current/tmp/pids/loop-slow_logs.pid
173
+ group loops
174
+ start program "/bin/bash -c 'cd /your/project/current && /usr/bin/bundle exec loops start slow_logs -p /your/project/shared/pids/loop-slow_logs.pid -e loops -d'"
175
+ stop program "/bin/bash -c 'cd /your/project/current && /usr/bin/bundle exec loops stop -p /your/project/shared/pids/loop-slow_logs.pid'"
176
+
177
+ If you do not use bundler, you can do:
178
+
180
179
  check process loop-slow_logs with pidfile /your/project/current/tmp/pids/loop-slow_logs.pid
181
180
  group loops
182
181
  start program "/your/project/current/script/loops start slow_logs -e loops -p tmp/pids/loop-slow_logs.pid -d"
183
182
  stop program "/your/project/current/script/loops stop slow_logs -e loops -p tmp/pids/loop-slow_logs.pid"
184
183
 
185
-
186
184
  == ActiveMQ-based workers? What's that?
187
185
 
188
186
  In some of our worker loops we poll ActiveMQ queue and process its items to perform some
@@ -172,6 +172,9 @@ class Loops::Engine
172
172
  if config['debug_loop']
173
173
  loop_proc.call
174
174
  else
175
+ # If wait_period is specified for the loop, update ProcessManager's
176
+ # setting.
177
+ @pm.update_wait_period(config['wait_period']) if config['wait_period']
175
178
  @pm.start_workers(name, config['workers_number'] || 1) { loop_proc.call }
176
179
  end
177
180
  end
@@ -205,9 +208,9 @@ class Loops::Engine
205
208
 
206
209
  def fix_ar_after_fork
207
210
  if Object.const_defined?('ActiveRecord')
208
- if Rails::VERSION::MAJOR < 3
211
+ if ActiveRecord::VERSION::MAJOR < 3
209
212
  ActiveRecord::Base.allow_concurrency = true
210
- else
213
+ elsif Object.const_defined?('Rails')
211
214
  Rails.application.config.allow_concurrency = true
212
215
  end
213
216
  ActiveRecord::Base.clear_active_connections!
@@ -5,7 +5,8 @@ module Loops
5
5
  def initialize(config, logger)
6
6
  @config = {
7
7
  'poll_period' => 1,
8
- 'workers_engine' => 'fork'
8
+ 'wait_period' => 10,
9
+ 'workers_engine' => 'fork',
9
10
  }.merge(config)
10
11
 
11
12
  @logger = logger
@@ -13,6 +14,11 @@ module Loops
13
14
  @shutdown = false
14
15
  end
15
16
 
17
+ def update_wait_period(period)
18
+ return unless period
19
+ @config['wait_period'] = [@config['wait_period'], period].max
20
+ end
21
+
16
22
  def start_workers(name, number, &blk)
17
23
  raise ArgumentError, "Need a worker block!" unless block_given?
18
24
 
@@ -42,7 +48,7 @@ module Loops
42
48
  stop_workers(false)
43
49
 
44
50
  # Wait for all the workers to die
45
- unless wait_for_workers(10)
51
+ unless wait_for_workers(@config['wait_period'])
46
52
  logger.info("Some workers are still alive after 10 seconds of waiting. Killing them...")
47
53
  stop_workers(true)
48
54
  wait_for_workers(5)
@@ -4,5 +4,5 @@
4
4
  # puts "Loops #{Loops::VERSION}"
5
5
  #
6
6
  module Loops
7
- VERSION = '2.0.6'
7
+ VERSION = '2.0.7'
8
8
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loops
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
5
- prerelease: false
4
+ hash: 1
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
- - 6
10
- version: 2.0.6
9
+ - 7
10
+ version: 2.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexey Kovyrin
@@ -16,8 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-22 00:00:00 -04:00
20
- default_executable:
19
+ date: 2011-06-28 00:00:00 Z
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: rspec
@@ -108,7 +107,6 @@ files:
108
107
  - spec/rails/config/init.rb
109
108
  - spec/rails/config/loops.yml
110
109
  - spec/spec_helper.rb
111
- has_rdoc: true
112
110
  homepage: http://github.com/kovyrin/loops
113
111
  licenses: []
114
112
 
@@ -138,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
136
  requirements: []
139
137
 
140
138
  rubyforge_project:
141
- rubygems_version: 1.3.7
139
+ rubygems_version: 1.8.5
142
140
  signing_key:
143
141
  specification_version: 3
144
142
  summary: Simple background loops framework for ruby