Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: modules/discourse/files/init-discourse

Issue 9377123: Set up proper FastCGI environment for Discourse and use nginx (Closed)
Patch Set: Converted init_discourse script to Python Created Feb. 18, 2013, 2:03 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: modules/discourse/files/init-discourse
===================================================================
rename from modules/discourse/files/deploy-discourse
rename to modules/discourse/files/init-discourse
--- a/modules/discourse/files/deploy-discourse
+++ b/modules/discourse/files/init-discourse
@@ -1,25 +1,53 @@
-#!/bin/bash
+#!/usr/bin/env python
-scm_url="https://hg.adblockplus.org/discourse"
-tmp_dir="/tmp/discourse-$$"
-config_dir="/etc/discourse"
-app_dir="/opt/discourse"
+import sys, os, pwd, subprocess
-hg clone "$scm_url" "$tmp_dir"
-ln -s "$config_dir/database.yml" "$tmp_dir/config/database.yml"
-ln -s "$config_dir/redis.yml" "$tmp_dir/config/redis.yml"
-pushd "$tmp_dir"
-bundle install
-rake assets:precompile RAILS_ENV="production"
-popd
+app_dir = '/opt/discourse'
+secret = '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'
-# TODO: Stop Thin
+# HOME environment variable isn't reliable when called via sudo
+home_dir = os.path.expanduser('~' + pwd.getpwuid(os.getuid()).pw_name)
-[[ -d $app_dir ]] && rm -rf "$app_dir"
-mv "$tmp_dir" "$app_dir"
+env = dict(os.environ)
+env['GEM_HOME'] = os.path.join(home_dir, '.gems')
-pushd "$app_dir"
-rake db:migrate RAILS_ENV="production"
-popd
+def preprocessFiles():
+ gemfile_path = os.path.join(app_dir, 'Gemfile')
+ handle = open(gemfile_path, 'rb')
+ if "gem 'fcgi'" not in map(str.strip, handle.readlines()):
+ handle.close()
+ handle = open(gemfile_path, 'ab')
+ print >>handle, "gem 'fcgi'"
+ print >>sys.stderr, 'Added fcgi gem to Gemfile'
+ handle.close()
-# TODO: Start Thin
+ secret_path = os.path.join(app_dir, 'config', 'initializers', 'secret_token.rb')
+ handle = open(secret_path, 'rb')
+ if handle.read().find('SET_SECRET_HERE') >= 0:
+ handle.close()
+ handle = open(secret_path, 'wb')
+ print >>handle, 'Discourse::Application.config.secret_token = "%s"' % secret
+ print >>sys.stderr, 'Defined our secret in config/initializers/secret_token.rb'
+ handle.close()
+
+def callRailsCommand(command):
+ subprocess.call(command, env=env, cwd=app_dir)
+
+def runInitCommands():
+ rake_path = os.path.join(env['GEM_HOME'], 'bin', 'rake')
+ spawn_path = '/etc/init.d/spawn-fcgi'
+
+ callRailsCommand(['bundle', 'install'])
+ callRailsCommand([rake_path, 'assets:precompile', 'RAILS_ENV=production'])
+
+ if os.path.exists(spawn_path):
+ subprocess.call(['sudo', spawn_path, 'stop'])
+
+ callRailsCommand([rake_path, 'db:migrate', 'RAILS_ENV=production'])
+
+ if os.path.exists(spawn_path):
+ subprocess.call(['sudo', spawn_path, 'start'])
+
+if __name__ == '__main__':
+ preprocessFiles()
+ runInitCommands()

Powered by Google App Engine
This is Rietveld