This is primarily to reduce load on MongoDB, where we've lately had performance problems that we suspect are caused by very large course structures being evicted from MongoDB's cache. This may potentially give us a path to better performance as well, but that's not the goal of this commit. Surprisingly, LZ4 seemed to actually run more slowly than zlib for this. Possibly because of some overhead in the Python bindings? GZip was also surprisingly slow given that it uses zlib underneath (something like 5x slower). Use separate cache backend for caching structures. Abstract out course structure cache. add datadog metrics for compressed course structure sizes Since we're using a different cache background, we don't need to have a cache prefix Use dummy cache backend for tests. Fallback to default cache if course_structure_cache doesn't exist.
179 lines
5.8 KiB
Python
179 lines
5.8 KiB
Python
"""
|
|
This config file runs the simplest dev environment"""
|
|
|
|
# We intentionally define lots of variables that aren't used, and
|
|
# want to import all variables from base settings files
|
|
# pylint: disable=wildcard-import, unused-wildcard-import
|
|
|
|
from .common import *
|
|
from openedx.core.lib.logsettings import get_logger_config
|
|
|
|
# import settings from LMS for consistent behavior with CMS
|
|
from lms.envs.dev import (WIKI_ENABLED)
|
|
|
|
DEBUG = True
|
|
TEMPLATE_DEBUG = DEBUG
|
|
LOGGING = get_logger_config(ENV_ROOT / "log",
|
|
logging_env="dev",
|
|
tracking_filename="tracking.log",
|
|
dev_env=True,
|
|
debug=True)
|
|
|
|
update_module_store_settings(
|
|
MODULESTORE,
|
|
module_store_options={
|
|
'default_class': 'xmodule.raw_module.RawDescriptor',
|
|
'fs_root': GITHUB_REPO_ROOT,
|
|
}
|
|
)
|
|
|
|
DJFS = {
|
|
'type': 'osfs',
|
|
'directory_root': 'cms/static/djpyfs',
|
|
'url_root': '/static/djpyfs'
|
|
}
|
|
|
|
# cdodge: This is the specifier for the MongoDB (using GridFS) backed static content store
|
|
# This is for static content for courseware, not system static content (e.g. javascript, css, edX branding, etc)
|
|
CONTENTSTORE = {
|
|
'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
|
|
'DOC_STORE_CONFIG': {
|
|
'host': 'localhost',
|
|
'db': 'xcontent',
|
|
},
|
|
# allow for additional options that can be keyed on a name, e.g. 'trashcan'
|
|
'ADDITIONAL_OPTIONS': {
|
|
'trashcan': {
|
|
'bucket': 'trash_fs'
|
|
}
|
|
}
|
|
}
|
|
|
|
DATABASES = {
|
|
'default': {
|
|
'ENGINE': 'django.db.backends.sqlite3',
|
|
'NAME': ENV_ROOT / "db" / "edx.db",
|
|
}
|
|
}
|
|
|
|
LMS_BASE = "localhost:8000"
|
|
FEATURES['PREVIEW_LMS_BASE'] = "localhost:8000"
|
|
|
|
REPOS = {
|
|
'edx4edx': {
|
|
'branch': 'master',
|
|
'origin': 'git@github.com:MITx/edx4edx.git',
|
|
},
|
|
'content-mit-6002x': {
|
|
'branch': 'master',
|
|
# 'origin': 'git@github.com:MITx/6002x-fall-2012.git',
|
|
'origin': 'git@github.com:MITx/content-mit-6002x.git',
|
|
},
|
|
'6.00x': {
|
|
'branch': 'master',
|
|
'origin': 'git@github.com:MITx/6.00x.git',
|
|
},
|
|
'7.00x': {
|
|
'branch': 'master',
|
|
'origin': 'git@github.com:MITx/7.00x.git',
|
|
},
|
|
'3.091x': {
|
|
'branch': 'master',
|
|
'origin': 'git@github.com:MITx/3.091x.git',
|
|
},
|
|
}
|
|
|
|
CACHES = {
|
|
# This is the cache used for most things. Askbot will not work without a
|
|
# functioning cache -- it relies on caching to load its settings in places.
|
|
# In staging/prod envs, the sessions also live here.
|
|
'default': {
|
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
|
'LOCATION': 'edx_loc_mem_cache',
|
|
'KEY_FUNCTION': 'util.memcache.safe_key',
|
|
},
|
|
|
|
# The general cache is what you get if you use our util.cache. It's used for
|
|
# things like caching the course.xml file for different A/B test groups.
|
|
# We set it to be a DummyCache to force reloading of course.xml in dev.
|
|
# In staging environments, we would grab VERSION from data uploaded by the
|
|
# push process.
|
|
'general': {
|
|
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
|
|
'KEY_PREFIX': 'general',
|
|
'VERSION': 4,
|
|
'KEY_FUNCTION': 'util.memcache.safe_key',
|
|
},
|
|
|
|
'mongo_metadata_inheritance': {
|
|
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
|
'LOCATION': '/var/tmp/mongo_metadata_inheritance',
|
|
'TIMEOUT': 300,
|
|
'KEY_FUNCTION': 'util.memcache.safe_key',
|
|
},
|
|
'loc_cache': {
|
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
|
'LOCATION': 'edx_location_mem_cache',
|
|
},
|
|
'course_structure_cache': {
|
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
|
'LOCATION': 'edx_course_structure_mem_cache',
|
|
},
|
|
}
|
|
|
|
# Make the keyedcache startup warnings go away
|
|
CACHE_TIMEOUT = 0
|
|
|
|
# Dummy secret key for dev
|
|
SECRET_KEY = '85920908f28904ed733fe576320db18cabd7b6cd'
|
|
|
|
################################ PIPELINE #################################
|
|
|
|
PIPELINE_SASS_ARGUMENTS = '--debug-info --require {proj_dir}/static/sass/bourbon/lib/bourbon.rb'.format(proj_dir=PROJECT_ROOT)
|
|
|
|
################################# CELERY ######################################
|
|
|
|
# By default don't use a worker, execute tasks as if they were local functions
|
|
CELERY_ALWAYS_EAGER = True
|
|
|
|
################################ DEBUG TOOLBAR #################################
|
|
INSTALLED_APPS += ('debug_toolbar', 'debug_toolbar_mongo', 'djpyfs')
|
|
MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
|
|
INTERNAL_IPS = ('127.0.0.1',)
|
|
|
|
DEBUG_TOOLBAR_PANELS = (
|
|
'debug_toolbar.panels.versions.VersionsPanel',
|
|
'debug_toolbar.panels.timer.TimerPanel',
|
|
'debug_toolbar.panels.settings.SettingsPanel',
|
|
'debug_toolbar.panels.headers.HeadersPanel',
|
|
'debug_toolbar.panels.request.RequestPanel',
|
|
'debug_toolbar.panels.sql.SQLPanel',
|
|
'debug_toolbar.panels.signals.SignalsPanel',
|
|
'debug_toolbar.panels.logging.LoggingPanel',
|
|
'debug_toolbar.panels.profiling.ProfilingPanel',
|
|
)
|
|
|
|
# To see stacktraces for MongoDB queries, set this to True.
|
|
# Stacktraces slow down page loads drastically (for pages with lots of queries).
|
|
DEBUG_TOOLBAR_MONGO_STACKTRACES = False
|
|
|
|
# Enable URL that shows information about the status of various services
|
|
FEATURES['ENABLE_SERVICE_STATUS'] = True
|
|
|
|
############################# SEGMENT-IO ##################################
|
|
|
|
# If there's an environment variable set, grab it and turn on Segment.io
|
|
# Note that this is the Studio key. There is a separate key for the LMS.
|
|
import os
|
|
SEGMENT_IO_KEY = os.environ.get('SEGMENT_IO_KEY')
|
|
if SEGMENT_IO_KEY:
|
|
FEATURES['SEGMENT_IO'] = True
|
|
|
|
|
|
#####################################################################
|
|
# Lastly, see if the developer has any local overrides.
|
|
try:
|
|
from .private import * # pylint: disable=import-error
|
|
except ImportError:
|
|
pass
|