class RailsPwnerer::App::Scripts

runs custom scripts on app events

Public Instance Methods

control_all(action) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
73 def control_all(action)
74   RailsPwnerer::Config.all_applications.each do |ai|
75     run_script ai[0], ai[1], (case action
76     when :pre_start then 'pre_start'
77     when :post_start then 'post_start'
78     when :pre_stop then 'pre_stop'
79     when :post_stop then 'post_stop'
80     when :pre_reset then 'pre_reset'
81     when :post_reset then 'post_reset'
82     end)
83   end 
84 end
post_reset(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
69 def post_reset(app_name, instance_name)
70   run_script app_name, instance_name, 'post_reset'
71 end
post_start(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
57 def post_start(app_name, instance_name)
58   run_script app_name, instance_name, 'post_start'
59 end
post_stop(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
63 def post_stop(app_name, instance_name)
64   run_script app_name, instance_name, 'post_stop'
65 end
pre_reset(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
66 def pre_reset(app_name, instance_name)
67   run_script app_name, instance_name, 'pre_reset'
68 end
pre_start(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
54 def pre_start(app_name, instance_name)
55   run_script app_name, instance_name, 'pre_start'
56 end
pre_stop(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
60 def pre_stop(app_name, instance_name)
61   run_script app_name, instance_name, 'pre_stop'
62 end
remove(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
50 def remove(app_name, instance_name)
51   run_script app_name, instance_name, 'remove'
52 end
run_script(app_name, instance_name, script_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
 6 def run_script(app_name, instance_name, script_name)
 7   app_config = RailsPwnerer::Config[app_name, instance_name]    
 8   pwnerer_user = app_config[:pwnerer_user]
 9   pwnerer_uid = uid_for_username(pwnerer_user)
10   pwnerer_gid = gid_for_username(pwnerer_user)
11       
12   return unless app_path = app_config[:app_path]  
13   
14   return unless File.exist?(app_config[:app_path])
15   Dir.chdir app_path do
16     script_file = Dir.glob(File.join('script/rails_pwnerer', script_name + '*')).first
17     return if script_file.nil?
18     # run as super-user if the script ends in _su or in _su.extension (e.g. _su.rb)
19     su_mode = (script_file =~ /\_su$/) || (script_file =~ /\_su\.[^.]*$/)
20     # make sure the script is executable
21     mode = File.stat(script_file).mode
22     File.chmod((mode | 0100) & 0777, script_file)
23     File.chown(pwnerer_uid, pwnerer_gid, script_file)
24     
25     # run the script under the app's user
26     pid = Process.fork do
27       unless su_mode
28         Process.uid = pwnerer_uid        
29         Process.gid = pwnerer_gid
30         Process.egid = pwnerer_gid
31         Process.euid = pwnerer_uid
32       end
33       Dir.chdir app_path do
34         script_prefix = (script_file[0] == ?/) ? '' : './'
35         Kernel.system %Q|#{script_prefix}#{script_file} "#{app_name}" "#{instance_name}"|
36       end
37     end
38     Process.wait pid
39   end
40 end
setup(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
42 def setup(app_name, instance_name)
43   run_script app_name, instance_name, 'setup'
44 end
update(app_name, instance_name) click to toggle source
   # File lib/rails_pwnerer/app/scripts.rb
46 def update(app_name, instance_name)
47   run_script app_name, instance_name, 'update'
48 end