# HG changeset patch # User Alexandre Fayolle # Date 1272364345 0 # Node ID 6eeec78c65f97417390ffa583177ff7b9bc6b88e # Parent dc896e698ab083f187cb50d789c8e5d887beedfd enforce use of environment variables when running as a service CW_INSTANCES_DIR, CW_INSTANCES_DATA_DIR, CW_RUNTIME_DIR must be positionned at the system level. This will ensure that cubicweb-ctl commands issued on the computer will use the proper directories. diff -r dc896e698ab0 -r 6eeec78c65f9 etwist/service.py --- a/etwist/service.py Tue Apr 27 07:49:47 2010 +0000 +++ b/etwist/service.py Tue Apr 27 10:32:25 2010 +0000 @@ -1,23 +1,30 @@ import os +import sys -import win32serviceutil -import win32service -import win32event +try: + import win32serviceutil + import win32service +except ImportError: + print 'Win32 extensions for Python are likely not installed.' + sys.exit(3) + from cubicweb.etwist.server import (CubicWebRootResource, reactor, server, parsePOSTData, channel) +import logging from logging import getLogger, handlers from cubicweb import set_log_methods from cubicweb.cwconfig import CubicWebConfiguration as cwcfg -logger = getLogger('cubicweb.twisted') -logger.handlers = [handlers.NTEventLogHandler('cubicweb')] - -if not os.environ.get('CW_INSTANCES_DIR'): - os.environ['CW_INSTANCES_DIR'] = r'C:\etc\cubicweb.d' -if not os.environ.get('USERNAME'): - os.environ['USERNAME'] = 'cubicweb' +def _check_env(env): + env_vars = ('CW_INSTANCES_DIR', 'CW_INSTANCES_DATA_DIR', 'CW_RUNTIME_DIR') + for var in env_vars: + if var not in env: + raise Exception('The environment variables %s must be set.' % \ + ', '.join(env_vars)) + if not env.get('USERNAME'): + env['USERNAME'] = 'cubicweb' class CWService(object, win32serviceutil.ServiceFramework): _svc_name_ = None @@ -27,11 +34,13 @@ def __init__(self, *args, **kwargs): win32serviceutil.ServiceFramework.__init__(self, *args, **kwargs) cwcfg.load_cwctl_plugins() + logger = getLogger('cubicweb') set_log_methods(CubicWebRootResource, logger) server.parsePOSTData = parsePOSTData def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) + logger = getLogger('cubicweb.twisted') logger.info('stopping %s service' % self.instance) reactor.stop() self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) @@ -39,8 +48,12 @@ def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_START_PENDING) logger = getLogger('cubicweb.twisted') + handler = handlers.NTEventLogHandler('cubicweb') + handler.setLevel(logging.INFO) + logger.addHandler(handler) logger.info('starting %s service' % self.instance) try: + _check_env(os.environ) # create the site config = cwcfg.config_for(self.instance) root_resource = CubicWebRootResource(config, False)