X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=openerp-server;h=71a52d5f06b6759fd1cdb2e867f00652775d63fc;hb=8ba72ec3902431e1355bec08d5ea92106ae21d4c;hp=b3a4a33e418ede8655ca9464891bf51734507cf1;hpb=b91d70a42d5a4d0fb88f7e2b0097fff87283c968;p=odoo%2Fodoo.git diff --git a/openerp-server b/openerp-server index b3a4a33..71a52d5 100755 --- a/openerp-server +++ b/openerp-server @@ -89,21 +89,26 @@ def setup_pid_file(): def preload_registry(dbname): """ Preload a registry, and start the cron.""" try: - db, pool = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False) - pool.get('ir.cron').restart(db.dbname) + db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False) + + # jobs will start to be processed later, when openerp.cron.start_master_thread() is called by openerp.service.start_services() + registry.schedule_cron_jobs() except Exception: logging.exception('Failed to initialize database `%s`.', dbname) def run_test_file(dbname, test_file): """ Preload a registry, possibly run a test file, and start the cron.""" - db, pool = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False) + try: + db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False) + cr = db.cursor() + logger = logging.getLogger('server') + logger.info('loading test file %s', test_file) + openerp.tools.convert_yaml_import(cr, 'base', file(test_file), {}, 'test', True) + cr.rollback() + cr.close() + except Exception: + logging.exception('Failed to initialize database `%s` and run test file `%s`.', dbname, test_file) - cr = db.cursor() - logger = logging.getLogger('server') - logger.info('loading test file %s', test_file) - openerp.tools.convert_yaml_import(cr, 'base', file(test_file), {}, 'test', True) - cr.rollback() - cr.close() def export_translation(): config = openerp.tools.config @@ -174,9 +179,12 @@ def dumpstacks(sig, frame): def setup_signal_handlers(): """ Register the signal handler defined above. """ SIGNALS = map(lambda x: getattr(signal, "SIG%s" % x), "INT TERM".split()) - map(lambda sig: signal.signal(sig, signal_handler), SIGNALS) if os.name == 'posix': + map(lambda sig: signal.signal(sig, signal_handler), SIGNALS) signal.signal(signal.SIGQUIT, dumpstacks) + elif os.name == 'nt': + import win32api + win32api.SetConsoleCtrlHandler(lambda sig: signal_handler(sig, None), 1) def quit_on_signals(): """ Wait for one or two signals then shutdown the server. @@ -186,9 +194,12 @@ def quit_on_signals(): """ # Wait for a first signal to be handled. (time.sleep will be interrupted - # by the signal handler.) - while quit_signals_received == 0: - time.sleep(60) + # by the signal handler.) The try/except is for the win32 case. + try: + while quit_signals_received == 0: + time.sleep(60) + except KeyboardInterrupt, e: + pass if config['pidfile']: os.unlink(config['pidfile']) @@ -227,6 +238,21 @@ if __name__ == "__main__": # services to be running before loading any registry. openerp.service.start_services() + for m in openerp.conf.server_wide_modules: + try: + __import__(m) + # Call any post_load hook. + info = openerp.modules.module.load_information_from_description_file(m) + if info['post_load']: + getattr(sys.modules[m], info['post_load'])() + except Exception: + msg = '' + if m == 'web': + msg = """ +The `web` module is provided by the addons found in the `openerp-web` project. +Maybe you forgot to add those addons in your addons_path configuration.""" + logging.exception('Failed to load server-wide module `%s`.%s', m, msg) + if config['db_name']: for dbname in config['db_name'].split(','): preload_registry(dbname) @@ -234,13 +260,6 @@ if __name__ == "__main__": if config["stop_after_init"]: sys.exit(0) - for m in openerp.conf.server_wide_modules: - __import__(m) - # Call any post_load hook. - info = openerp.modules.module.load_information_from_description_file(m) - if info['post_load']: - getattr(sys.modules[m], info['post_load'])() - setup_pid_file() logger = logging.getLogger('server') logger.info('OpenERP server is running, waiting for connections...')