diff --git a/pavelib/paver_tests/test_servers.py b/pavelib/paver_tests/test_servers.py index 348c7089da..3016febb36 100644 --- a/pavelib/paver_tests/test_servers.py +++ b/pavelib/paver_tests/test_servers.py @@ -42,9 +42,9 @@ EXPECTED_INDEX_COURSE_COMMAND = ( u"python manage.py {system} --settings={settings} reindex_course --setup" ) EXPECTED_PRINT_SETTINGS_COMMAND = [ - u"python manage.py lms --settings={settings} print_setting STATIC_ROOT 2>/dev/null", - u"python manage.py cms --settings={settings} print_setting STATIC_ROOT 2>/dev/null", - u"python manage.py lms --settings={settings} print_setting WEBPACK_CONFIG_PATH 2>/dev/null" + u"python manage.py lms --settings={settings} print_setting STATIC_ROOT 2>{log_file}", + u"python manage.py cms --settings={settings} print_setting STATIC_ROOT 2>{log_file}", + u"python manage.py lms --settings={settings} print_setting WEBPACK_CONFIG_PATH 2>{log_file}" ] EXPECTED_WEBPACK_COMMAND = ( u"NODE_ENV={node_env} STATIC_ROOT_LMS={static_root_lms} STATIC_ROOT_CMS={static_root_cms} " @@ -243,7 +243,8 @@ class TestPaverServerTasks(PaverTestCase): expected_messages.append(u"xmodule_assets common/static/xmodule") expected_messages.append(u"install npm_assets") expected_messages.extend( - [c.format(settings=expected_asset_settings) for c in EXPECTED_PRINT_SETTINGS_COMMAND] + [c.format(settings=expected_asset_settings, + log_file=Env.PRINT_SETTINGS_LOG_FILE) for c in EXPECTED_PRINT_SETTINGS_COMMAND] ) expected_messages.append(EXPECTED_WEBPACK_COMMAND.format( node_env="production", @@ -288,7 +289,8 @@ class TestPaverServerTasks(PaverTestCase): expected_messages.append(u"xmodule_assets common/static/xmodule") expected_messages.append(u"install npm_assets") expected_messages.extend( - [c.format(settings=expected_asset_settings) for c in EXPECTED_PRINT_SETTINGS_COMMAND] + [c.format(settings=expected_asset_settings, + log_file=Env.PRINT_SETTINGS_LOG_FILE) for c in EXPECTED_PRINT_SETTINGS_COMMAND] ) expected_messages.append(EXPECTED_WEBPACK_COMMAND.format( node_env="production", diff --git a/pavelib/utils/envs.py b/pavelib/utils/envs.py index 639b92fbe5..817eee76bb 100644 --- a/pavelib/utils/envs.py +++ b/pavelib/utils/envs.py @@ -3,6 +3,7 @@ Helper functions for loading environment settings. """ from __future__ import print_function +import io import json import os import sys @@ -11,7 +12,7 @@ from time import sleep import memcache from lazy import lazy from path import Path as path -from paver.easy import sh +from paver.easy import BuildFailure, sh from six.moves import configparser from pavelib.utils.cmd import django_cmd @@ -95,6 +96,8 @@ class Env(object): # Directory that videos are served from VIDEO_SOURCE_DIR = REPO_ROOT / "test_root" / "data" / "video" + PRINT_SETTINGS_LOG_FILE = BOK_CHOY_LOG_DIR / "print_settings.log" + # Detect if in a Docker container, and if so which one SERVER_HOST = os.environ.get('BOK_CHOY_HOSTNAME', '0.0.0.0') USING_DOCKER = SERVER_HOST != '0.0.0.0' @@ -240,17 +243,27 @@ class Env(object): """ if not settings: settings = os.environ.get("EDX_PLATFORM_SETTINGS", "aws") - value = sh( - django_cmd( - system, - settings, - "print_setting {django_setting} 2>/dev/null".format( - django_setting=django_setting - ) - ), - capture=True - ) - return unicode(value).strip() + log_dir = os.path.dirname(cls.PRINT_SETTINGS_LOG_FILE) + if not os.path.exists(log_dir): + os.makedirs(log_dir) + try: + value = sh( + django_cmd( + system, + settings, + "print_setting {django_setting} 2>{log_file}".format( + django_setting=django_setting, + log_file=cls.PRINT_SETTINGS_LOG_FILE + ) + ), + capture=True + ) + return unicode(value).strip() + except BuildFailure: + print("Unable to print the value of the {} setting:".format(django_setting)) + with io.open(cls.PRINT_SETTINGS_LOG_FILE, 'r') as f: + print(f.read()) + sys.exit(1) @classmethod def covered_modules(cls):