rbg 0.9.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/bin/rbg +7 -3
  2. data/lib/rbg.rb +18 -7
  3. data/lib/rbg/config.rb +19 -23
  4. metadata +5 -4
data/bin/rbg CHANGED
@@ -2,8 +2,8 @@
2
2
  require 'rbg'
3
3
 
4
4
  def die
5
- puts "Usage: " + $0 + " run|start|stop|reload -c config_file [-E environment]"
6
- Process.exit(1)
5
+ puts "Usage: rbg run|start|stop|reload [-c config_file] [-E environment]"
6
+ Process.exit(1)
7
7
  end
8
8
 
9
9
  begin
@@ -19,6 +19,10 @@ begin
19
19
  end
20
20
  end
21
21
 
22
+ if config_file.nil?
23
+ config_file = "ProcessFile"
24
+ end
25
+
22
26
  die unless config_file
23
27
 
24
28
  case command
@@ -28,7 +32,7 @@ begin
28
32
  Rbg.start(config_file, {:background => true, :environment => environment})
29
33
  when 'stop'
30
34
  Rbg.stop(config_file, {:environment => environment})
31
- when 'reload'
35
+ when 'reload', 'restart'
32
36
  Rbg.reload(config_file, {:environment => environment})
33
37
  else
34
38
  die
data/lib/rbg.rb CHANGED
@@ -98,8 +98,11 @@ module Rbg
98
98
  # Execure before_fork code
99
99
  self.config.after_fork.call
100
100
 
101
- # The actual code to run
102
- require self.config.script
101
+ if self.config.script.is_a?(String)
102
+ require self.config.script
103
+ elsif self.config.script.is_a?(Proc)
104
+ self.config.script.call
105
+ end
103
106
  end
104
107
 
105
108
  # Print some debug info and save the pid
@@ -143,13 +146,13 @@ module Rbg
143
146
  # This will load the before_fork in a clean process then fork the script as required
144
147
  self.start_parent
145
148
 
146
- # If we get a USR1, send the existing workers a TERM before starting some new ones
149
+ # A restart is not required yet...
150
+ restart_needed = false
151
+
152
+ # If we get a USR1, set this process as waiting for a restart
147
153
  Signal.trap("USR1", proc {
148
154
  puts "Master got a USR1."
149
- STDOUT.flush
150
- self.kill_child_processes
151
- load_config
152
- self.start_parent
155
+ restart_needed = true
153
156
  })
154
157
 
155
158
  # If we get a TERM, send the existing workers a TERM before bowing out
@@ -171,6 +174,14 @@ module Rbg
171
174
  # Main loop, we mostly idle, but check if the parent we created has died and exit
172
175
  loop do
173
176
  sleep 2
177
+ if restart_needed
178
+ STDOUT.flush
179
+ self.kill_child_processes
180
+ load_config
181
+ self.start_parent
182
+ restart_needed = false
183
+ end
184
+
174
185
  self.child_processes.each do |p|
175
186
  begin
176
187
  Process.getpgid( p )
@@ -1,39 +1,35 @@
1
1
  module Rbg
2
2
  class Config
3
3
 
4
- ## The name of the application as used in the proclist
5
4
  attr_accessor :name
6
-
7
- ## The ruby script which should be backgrounded
5
+ attr_accessor :root
8
6
  attr_accessor :script
9
-
10
- ## Path to the log file for the master process
11
7
  attr_accessor :log_path
12
-
13
- ## Path to the PID file for the master process
14
8
  attr_accessor :pid_path
15
-
16
- ## Number of workers to start
17
9
  attr_accessor :workers
18
10
 
19
- ## Block of code to be executed in the master process before the process
20
- ## has been forked.
11
+ def root
12
+ @root || File.expand_path('./')
13
+ end
14
+
15
+ def log_path
16
+ @log_path || File.join(root, 'log', "#{name}.log")
17
+ end
18
+
19
+ def pid_path
20
+ @pid_path || File.join(root, 'log', "#{name}.pid")
21
+ end
22
+
23
+ def script(&block)
24
+ block_given? ? @script = block : @script
25
+ end
26
+
21
27
  def before_fork(&block)
22
- if block_given?
23
- @before_fork = block
24
- else
25
- @before_fork
26
- end
28
+ block_given? ? @before_fork = block : @before_fork
27
29
  end
28
30
 
29
- ## Block of code to be executed in the child process after forking has
30
- ## taken place.
31
31
  def after_fork(&block)
32
- if block_given?
33
- @after_fork = block
34
- else
35
- @after_fork
36
- end
32
+ block_given? ? @after_fork = block : @after_fork
37
33
  end
38
34
 
39
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-19 00:00:00.000000000Z
12
+ date: 2014-02-10 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: charlie@atechmedia.com
@@ -19,8 +19,8 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - bin/rbg
22
- - lib/rbg.rb
23
22
  - lib/rbg/config.rb
23
+ - lib/rbg.rb
24
24
  homepage: http://www.atechmedia.com
25
25
  licenses: []
26
26
  post_install_message:
@@ -41,9 +41,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  version: '0'
42
42
  requirements: []
43
43
  rubyforge_project:
44
- rubygems_version: 1.8.18
44
+ rubygems_version: 1.8.23
45
45
  signing_key:
46
46
  specification_version: 3
47
47
  summary: Ruby Backgrounder allows multiple copies of ruby scripts to be run in the
48
48
  background and restarted
49
49
  test_files: []
50
+ has_rdoc: false