From eaf03e616571063a9ac398b6d81429adb2ae1b2f Mon Sep 17 00:00:00 2001 From: Konstantin Sivakov Date: Tue, 25 Sep 2018 11:39:09 +0200 Subject: [PATCH] Set test request context for rebuild fast --- ckan/cli/search_index.py | 23 ++++++++++++++--------- ckan/lib/cli.py | 3 --- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ckan/cli/search_index.py b/ckan/cli/search_index.py index 12f1ea64307..4f78728386b 100644 --- a/ckan/cli/search_index.py +++ b/ckan/cli/search_index.py @@ -1,5 +1,6 @@ # encoding: utf-8 +import multiprocessing as mp import os import click @@ -84,6 +85,7 @@ def clear(dataset_name): @click.pass_context def rebuild_fast(ctx): conf = ctx.obj.config + flask_app = ctx.obj.app.apps['flask_app']._wsgi_app db_url = conf['sqlalchemy.url'] engine = sa.create_engine(db_url) package_ids = [] @@ -94,7 +96,6 @@ def rebuild_fast(ctx): def start(ids): ## load actual enviroment for each subprocess, so each have thier own ## sa session - self._load_config() from ckan.lib.search import rebuild, commit rebuild(package_ids=ids) commit() @@ -108,11 +109,15 @@ def chunks(l, n): yield l[n*newn-newn:] processes = [] - for chunk in chunks(package_ids, mp.cpu_count()): - process = mp.Process(target=start, args=(chunk,)) - processes.append(process) - process.daemon = True - process.start() - - for process in processes: - process.join() + with flask_app.test_request_context(): + try: + for chunk in chunks(package_ids, mp.cpu_count()): + process = mp.Process(target=start, args=(chunk,)) + processes.append(process) + process.daemon = True + process.start() + + for process in processes: + process.join() + except Exception as e: + click.echo(e.message) diff --git a/ckan/lib/cli.py b/ckan/lib/cli.py index aecc40c2f2e..77ef892a565 100644 --- a/ckan/lib/cli.py +++ b/ckan/lib/cli.py @@ -556,9 +556,6 @@ def rebuild_fast(self): package_ids.append(row[0]) def start(ids): - ## load actual enviroment for each subprocess, so each have thier own - ## sa session - self._load_config() from ckan.lib.search import rebuild, commit rebuild(package_ids=ids) commit()