Instead, we use XModule field default values when creating an empty XModule. Driven by this use case, we also allow for XModules to be created in memory without being persisted to the database at all. This necessitates a change to the Modulestore api, replacing clone_item with create_draft and save_xmodule.
136 lines
5.1 KiB
Ruby
136 lines
5.1 KiB
Ruby
default_options = {
|
|
:lms => '8000',
|
|
:cms => '8001',
|
|
}
|
|
|
|
task :predjango => :install_python_prereqs do
|
|
sh("find . -type f -name *.pyc -delete")
|
|
sh('pip install -q --no-index -r requirements/edx/local.txt')
|
|
end
|
|
|
|
|
|
task :fastlms do
|
|
# this is >2 times faster that rake [lms], and does not need web, good for local dev
|
|
django_admin = ENV['DJANGO_ADMIN_PATH'] || select_executable('django-admin.py', 'django-admin')
|
|
sh("#{django_admin} runserver --traceback --settings=lms.envs.dev --pythonpath=.")
|
|
end
|
|
|
|
# Start :system locally with the specified :env and :options.
|
|
#
|
|
# This task should be invoked via the wrapper below, so we don't
|
|
# include a description to keep it from showing up in rake -T.
|
|
task :runserver, [:system, :env, :options] => [:install_prereqs, 'assets:_watch', :predjango] do |t, args|
|
|
sh(django_admin(args.system, args.env, 'runserver', args.options))
|
|
end
|
|
|
|
[:lms, :cms].each do |system|
|
|
desc <<-desc
|
|
Start the #{system} locally with the specified environment (defaults to dev).
|
|
Other useful environments are devplus (for dev testing with a real local database)
|
|
desc
|
|
task system, [:env, :options] do |t, args|
|
|
args.with_defaults(:env => 'dev', :options => default_options[system])
|
|
Rake::Task[:runserver].invoke(system, args.env, args.options)
|
|
end
|
|
|
|
desc "Start #{system} Celery worker"
|
|
task "#{system}_worker", [:options] => [:predjango] do |t, args|
|
|
args.with_defaults(:options => default_options[system])
|
|
django_admin = ENV['DJANGO_ADMIN_PATH'] || select_executable('django-admin.py', 'django-admin')
|
|
command = 'celery worker'
|
|
sh("#{django_admin} #{command} --loglevel=INFO --settings=#{system}.envs.dev_with_worker --pythonpath=. #{args.join(' ')}")
|
|
end
|
|
|
|
# Per environment tasks
|
|
environments(system).each do |env|
|
|
desc "Attempt to import the settings file #{system}.envs.#{env} and report any errors"
|
|
task "#{system}:check_settings:#{env}" => :predjango do
|
|
sh("echo 'import #{system}.envs.#{env}' | #{django_admin(system, env, 'shell')}")
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "Reset the relational database used by django. WARNING: this will delete all of your existing users"
|
|
task :resetdb, [:env] do |t, args|
|
|
args.with_defaults(:env => 'dev')
|
|
sh(django_admin(:lms, args.env, 'syncdb'))
|
|
sh(django_admin(:lms, args.env, 'migrate'))
|
|
end
|
|
|
|
task :runserver => :lms
|
|
|
|
desc "Run django-admin <action> against the specified system and environment"
|
|
task "django-admin", [:action, :system, :env, :options] do |t, args|
|
|
# If no system was explicitly set, we want to run both CMS and LMS for migrate and syncdb.
|
|
no_system_set = !args.system
|
|
args.with_defaults(:env => 'dev', :system => 'lms', :options => '')
|
|
sh(django_admin(args.system, args.env, args.action, args.options))
|
|
if no_system_set and (args.action == 'migrate' or args.action == 'syncdb')
|
|
sh(django_admin('cms', args.env, args.action, args.options))
|
|
end
|
|
end
|
|
|
|
desc "Set the staff bit for a user"
|
|
task :set_staff, [:user, :system, :env] do |t, args|
|
|
args.with_defaults(:env => 'dev', :system => 'lms', :options => '')
|
|
sh(django_admin(args.system, args.env, 'set_staff', args.user))
|
|
end
|
|
|
|
namespace :cms do
|
|
desc "Clone existing MongoDB based course"
|
|
task :clone do
|
|
|
|
if ENV['SOURCE_LOC'] and ENV['DEST_LOC']
|
|
sh(django_admin(:cms, :dev, :clone, ENV['SOURCE_LOC'], ENV['DEST_LOC']))
|
|
else
|
|
raise "You must pass in a SOURCE_LOC and DEST_LOC parameters"
|
|
end
|
|
end
|
|
|
|
desc "Delete existing MongoDB based course"
|
|
task :delete_course do
|
|
|
|
if ENV['LOC'] and ENV['COMMIT']
|
|
sh(django_admin(:cms, :dev, :delete_course, ENV['LOC'], ENV['COMMIT']))
|
|
elsif ENV['LOC']
|
|
sh(django_admin(:cms, :dev, :delete_course, ENV['LOC']))
|
|
else
|
|
raise "You must pass in a LOC parameter"
|
|
end
|
|
end
|
|
|
|
desc "Import course data within the given DATA_DIR variable"
|
|
task :import do
|
|
if ENV['DATA_DIR'] and ENV['COURSE_DIR']
|
|
sh(django_admin(:cms, :dev, :import, ENV['DATA_DIR'], ENV['COURSE_DIR']))
|
|
elsif ENV['DATA_DIR']
|
|
sh(django_admin(:cms, :dev, :import, ENV['DATA_DIR']))
|
|
else
|
|
raise "Please specify a DATA_DIR variable that point to your data directory.\n" +
|
|
"Example: \`rake cms:import DATA_DIR=../data\`"
|
|
end
|
|
end
|
|
|
|
desc "Import course data within the given DATA_DIR variable"
|
|
task :xlint do
|
|
if ENV['DATA_DIR'] and ENV['COURSE_DIR']
|
|
sh(django_admin(:cms, :dev, :xlint, ENV['DATA_DIR'], ENV['COURSE_DIR']))
|
|
elsif ENV['DATA_DIR']
|
|
sh(django_admin(:cms, :dev, :xlint, ENV['DATA_DIR']))
|
|
else
|
|
raise "Please specify a DATA_DIR variable that point to your data directory.\n" +
|
|
"Example: \`rake cms:import DATA_DIR=../data\`"
|
|
end
|
|
end
|
|
|
|
desc "Export course data to a tar.gz file"
|
|
task :export do
|
|
if ENV['COURSE_ID'] and ENV['OUTPUT_PATH']
|
|
sh(django_admin(:cms, :dev, :export, ENV['COURSE_ID'], ENV['OUTPUT_PATH']))
|
|
else
|
|
raise "Please specify a COURSE_ID and OUTPUT_PATH.\n" +
|
|
"Example: \`rake cms:export COURSE_ID=MITx/12345/name OUTPUT_PATH=foo.tar.gz\`"
|
|
end
|
|
end
|
|
end
|