OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 | 2 |
3 import sys, os, pwd, subprocess | 3 import sys, os, pwd, subprocess |
4 | 4 |
5 app_dir = '/opt/discourse' | 5 app_dir = '/opt/discourse' |
6 secret = os.environ.get('DISCOURSE_SECRET', None) | |
7 airbrake_key = os.environ.get('AIRBRAKE_KEY', None) | 6 airbrake_key = os.environ.get('AIRBRAKE_KEY', None) |
8 | 7 |
9 # HOME environment variable isn't reliable when called via sudo | 8 # HOME environment variable isn't reliable when called via sudo |
10 home_dir = os.path.expanduser('~' + pwd.getpwuid(os.getuid()).pw_name) | 9 home_dir = os.path.expanduser('~' + pwd.getpwuid(os.getuid()).pw_name) |
11 | 10 |
12 env = dict(os.environ) | 11 env = dict(os.environ) |
13 env['GEM_HOME'] = os.path.join(home_dir, '.gems') | |
14 env['RAILS_ENV'] = 'production' | 12 env['RAILS_ENV'] = 'production' |
15 | 13 |
16 # See http://meta.discourse.org/t/tuning-ruby-and-rails-for-discourse/4126 | 14 # See http://meta.discourse.org/t/tuning-ruby-and-rails-for-discourse/4126 |
17 env['RUBY_GC_MALLOC_LIMIT'] = '90000000' | 15 env['RUBY_GC_MALLOC_LIMIT'] = '90000000' |
18 | 16 |
19 def preprocessFiles(): | |
20 secret_path = os.path.join(app_dir, 'config', 'initializers', 'secret_token.rb
') | |
21 handle = open(secret_path, 'rb') | |
22 if handle.read().find('SET_SECRET_HERE') >= 0: | |
23 if secret != None: | |
24 handle.close() | |
25 handle = open(secret_path, 'wb') | |
26 print >>handle, 'Discourse::Application.config.secret_token = "%s"' % secr
et | |
27 print >>sys.stderr, 'Defined our secret in config/initializers/secret_toke
n.rb' | |
28 else: | |
29 print >>sys.stderr, 'Skipping defining secret in config/initializers/secre
t_token.rb, please set DISCOURSE_SECRET environment variable' | |
30 handle.close() | |
31 | |
32 def callRailsCommand(command): | 17 def callRailsCommand(command): |
33 subprocess.call(command, env=env, cwd=app_dir) | 18 subprocess.check_call(command, env=env, cwd=app_dir) |
34 | 19 |
35 def initAirBrake(): | 20 def initAirBrake(): |
36 if airbrake_key == None: | 21 if airbrake_key == None: |
37 return | 22 return |
38 | 23 |
39 path = os.path.join(app_dir, 'config', 'initializers', 'airbrake.rb') | 24 path = os.path.join(app_dir, 'config', 'initializers', 'airbrake.rb') |
40 if os.path.exists(path): | 25 if os.path.exists(path): |
41 handle = open(path, 'rb') | 26 with open(path, 'rb') as handle: |
42 data = handle.read() | 27 data = handle.read() |
43 handle.close() | |
44 | 28 |
45 if data.find(airbrake_key) >= 0: | 29 if data.find(airbrake_key) >= 0: |
46 return | 30 return |
47 else: | 31 else: |
48 os.remove(path) | 32 os.remove(path) |
49 callRailsCommand([os.path.join(app_dir, 'script', 'rails'), 'generate', 'airbr
ake', '--api-key', airbrake_key]) | 33 callRailsCommand([os.path.join(app_dir, 'script', 'rails'), 'generate', 'airbr
ake', '--api-key', airbrake_key]) |
50 | 34 |
| 35 with open(path, 'rb+') as handle: |
| 36 # Prepend file with require 'airbrake', won't happen by default |
| 37 data = handle.read() |
| 38 handle.seek(0) |
| 39 print >>handle, "require 'airbrake'" |
| 40 handle.write(data) |
| 41 |
51 def runInitCommands(): | 42 def runInitCommands(): |
52 rake_path = os.path.join(env['GEM_HOME'], 'bin', 'rake') | 43 service_path = '/etc/init.d/discourse' |
53 service_path = '/etc/init.d/discourse-thin' | |
54 | 44 |
55 callRailsCommand(['bundle', 'install']) | 45 callRailsCommand(['bundle', 'install', '--deployment', '--without', 'test', '-
-without', 'development']) |
56 initAirBrake() | 46 initAirBrake() |
57 callRailsCommand([rake_path, 'assets:precompile']) | 47 callRailsCommand(['bundle', 'exec', 'rake', 'assets:precompile']) |
58 | 48 |
59 if os.path.exists(service_path): | 49 if os.path.exists(service_path): |
60 subprocess.call(['sudo', service_path, 'stop']) | 50 subprocess.check_call(['sudo', service_path, 'stop']) |
61 | 51 |
62 callRailsCommand([rake_path, 'db:migrate']) | 52 callRailsCommand(['bundle', 'exec', 'rake', 'db:migrate']) |
63 | 53 |
64 if os.path.exists(service_path): | 54 if os.path.exists(service_path): |
65 subprocess.call(['sudo', service_path, 'start']) | 55 subprocess.check_call(['sudo', service_path, 'start']) |
66 | 56 |
67 if __name__ == '__main__': | 57 if __name__ == '__main__': |
68 preprocessFiles() | |
69 runInitCommands() | 58 runInitCommands() |
OLD | NEW |