Managing Open edX Tips and Tricks
NOTE: These are instructions for the Full Stack or Native configuration, not the Developer Stack.
Managing the server
manage.py commands
login to the server and change to the /edx/app/edxapp/edx-platform directory to use manage.py
list all manage.py commands
source /edx/app/edxapp/edxapp_env
python /edx/app/edxapp/edx-platform/manage.py lms --settings production help
create or upgrade a user to superuserExecute the following commands (updating the username and email account appropriately)
sudo su edxapp -s /bin/bash cd source /edx/app/edxapp/edxapp_env python /edx/app/edxapp/edx-platform/manage.py lms manage_user staff staff@example.com --staff --superuser --settings=productionSee alsoCreating an admin user in LMS/CMS, which is written for devstack
set or change password
source /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py lms --settings production changepassword user
launch the django shell
source /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py lms --settings production shell
importing a course from github
Example using the demo course
cd /var/tmp
git clone https://github.com/edx/edx-demo-course.gitsource /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py cms --settings=production import /edx/var/edxapp/data /var/tmp/edx-demo-course
run migrations
cd /var/tmp
git clone https://github.com/edx/edx-demo-course.gitsource /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py {lms/cms} syncdb --settings=production
delete course
source /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py cms --settings=production delete_course Organization/CourseNumber/CourseRun
delete course in Cypress version
source /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py cms --settings=production delete_course course-v1:Organization+CourseNumber+CourseRun commit
See help and help <cmd> for more information!
MySQL access
First install jq, then you should be able to just run this. Note that you lms.auth.json location may be different:
sudo apt-get install jq
sudo mysql $(jq -r '.DATABASES.default | "-u" + .USER + " -p\"" + .PASSWORD + "\" -h" + .HOST + " -P" + ( .PORT | tostring ) + " " + .NAME' /opt/openedx/lms.auth.json)
Use runserver instead of gunicorn (helpful for debugging)
Shutdown the lms and cms (and optionally the workers)
sudo /edx/bin/supervisorctl
> stop lms cms edxapp_worker:
Launch the lms using the debug server
source /edx/app/edxapp/edxapp_envpython /edx/app/edxapp/edx-platform/manage.py lms runserver 8000 --settings production
When you connect your browser requests will go to the debug server instead of gunicorn through nginx. You will still need to compile static assets of they change
See what services are running
sudo /edx/bin/supervisorctl status
you should see something like the following:
certs RUNNING pid 19862, uptime 0:00:04
cms RUNNING pid 19884, uptime 0:00:03
lms RUNNING pid 19879, uptime 0:00:03
edxapp_worker:cms_default_4 RUNNING pid 19915, uptime 0:00:03
edxapp_worker:cms_high_1 RUNNING pid 19901, uptime 0:00:03
edxapp_worker:cms_low_3 RUNNING pid 19890, uptime 0:00:03
edxapp_worker:lms_default_3 RUNNING pid 19897, uptime 0:00:03
edxapp_worker:lms_high_4 RUNNING pid 19922, uptime 0:00:03
edxapp_worker:lms_high_mem_2 RUNNING pid 19894, uptime 0:00:03
edxapp_worker:lms_low_1 RUNNING pid 19908, uptime 0:00:03
forum RUNNING pid 19855, uptime 0:00:04
ora RUNNING pid 19875, uptime 0:00:04
ora_celery RUNNING pid 19866, uptime 0:00:04
xqueue RUNNING pid 19853, uptime 0:00:04
xqueue_consumer RUNNING pid 19860, uptime 0:00:04
Restarting Services
LMS -
sudo /edx/bin/supervisorctl restart lmsCMS - sudo /edx/bin/supervisorctl restart cmsWorkers -
sudo /edx/bin/supervisorctl restart edxapp_worker:
(Note: the colon character : at the end of the line is mandatory!)
Updating Versions using edX repos
Use the /edx/bin/update to update repo versions on the server.
Allowed repo names [edx-platform, xqueue, cs_comments_service, xserver, ease, edx-ora, configuration, read-only-certificate-code]
Examples:
sudo /edx/bin/update edx-platform master- change edx-platform to use the latest on the master branchsudo /edx/bin/update cs_comments_service master- change the forums service to use the latest on the master branch
Using an edx-platform fork
sudo rm -rf /edx/app/edxapp/edx-platform- to change the remote you need to remove the existing edx-platform checkoutAdd the following line to
/edx/app/edx_ansible/server-vars.yml-edx_platform_repo: "https://github.com/<user>/edx-platform.git"sudo /edx/bin/update edx-platform master- update edx-platform using the forked repo
Compile assets manually
To compile javascript and css outside of the update script run the following commands:
sudo -H -u edxapp bashsource /edx/app/edxapp/edxapp_envcd /edx/app/edxapp/edx-platformpaver update_assets cms --settings=productionpaver update_assets lms --settings=production
Suggest issuing the following to debug issues with r.js optimizer issues
python manage.py cms --settings=production collectstatic --noinputpython manage.py lms --settings=production collectstatic --noinput
Generating dummy translations
To generate dummy translation strings for i18n and right-to-left testing:
sudo -H -u edxapp bashsource /edx/app/edxapp/edxapp_envcd /edx/app/edxapp/edx-platformpaver i18n_dummy
Troubleshooting
Unable to connect to the LMS
Check to see if nginx is running:
sudo service nginx statussudo service nginx start
NGINX logs are located in /edx/var/log/nginx NGINX configurations are located in/edx/app/nginx/sites-enabled
Check to see if the lms/cms is running
sudo /edx/bin/supervisorctl status lms cms
If you are still unable to connect to the LMS run the following commands:
sudo service nginx stopsudo service supervisor stopsudo service supervisor.devpi stopsudo pkill -u www-datasudo service nginx startsudo service supervisor startsudo service supervisor.devpi startstop everything except the LMS and CMS
sudo /edx/bin/supervisorctl stop discern discern_celery \
forum ora ora_celery xqueue xqueue_consumer xserver edxapp_worker:
sudo tail -f /edx/var/log/{lms,cms,nginx}/*log
While tailing the log files try to connect your browser to the LMS or Studio
Log files
The Full stack sends all application logs to rsyslog which writes config files to the
/edx/var/logdirectory.Supervisor logs stderr and stdout, its logs are located in
/edx/var/log/supervisor
server-vars.yml does not make any changes after running the update bash script
Take a look at this line in the /edx/bin/update bash script to see where the server-vars.yml file should be:
This means you are using an older version of the configuration repo, so create and add your settings in /edx/var/edx_ansible/server-vars.yml:
if [[ -f /edx/var/edx_ansible/server-vars.yml ]]; then
extra_args="-e@/edx/var/edx_ansible/server-vars.yml"
fi
The following line in /edx/bin/update means you are using the current version of the configuration repo. If so, create and modify your settings in /edx/app/edx_ansible/server-vars.yml:
if [[ -f /edx/app/edx_ansible/server-vars.yml ]]; then
extra_args="-e@/edx/app/edx_ansible/server-vars.yml"
fi
Notes: this may be changed in the future