Welcome, guest | Sign In | My Account | Store | Cart
Simple script to allow us to run paster more easily (but probably in an unintended way)
import subprocess
import argparse
import os
import sys
import signal

#change this to be whatever your project will be called, 
import my_paster_package

def main():
    parser = argparse.ArgumentParser(description='Run as --dev or --prod.')
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--dev', action="store_true", default=False)
    group.add_argument('--prod', action="store_true", default=False)
    args = parser.parse_args()
    #make sure we are running the paster out of the venv by finding the bin directory that this script is being
    #run out of
    bin_dir = os.path.dirname(sys.executable)
    config_file_dir = my_paster_package.__path__[0]
    if args.dev:
        p = subprocess.Popen("./paster serve %s/development.ini --reload" % (config_file_dir + "/.."), 
                             shell=True, cwd=bin_dir)
    elif args.prod:
        paster_pid_file = bin_dir+"/paster.pid"
        p = subprocess.Popen("./paster serve %s/production.ini --pid-file=%s" % (config_file_dir, paster_pid_file), 
                             shell=True, cwd=bin_dir)
        #attach a signal handler so we can kill off the subprocesses when supervisor kills this script
        #otherwise the kill signal doens't propegate to all the paster processes
        def signal_handler(signal, frame):
            if os.path.exists(paster_pid_file):
                paster_pid = open(paster_pid_file, "r").read()
                os.system("kill -2 %s" % (paster_pid))
                print "Warning: Could not find paster pid file, paster might not have properly terminated"
        signal.signal(signal.SIGTERM, signal_handler)

        raise Exception("Please choose either --dev or --prod")
    sts = os.waitpid(p.pid, 0)[1]
    #return the code in case of a problem

if __name__ == '__main__':