Rake by default imports all .rake files in the rakelib dir, so we can use that rather than doing our own import loop.
142 lines
5.1 KiB
Ruby
142 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
|
|
|
|
desc "Update the relational database to the latest migration"
|
|
task :migrate, [:env] do |t, args|
|
|
args.with_defaults(:env => 'dev')
|
|
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|
|
|
args.with_defaults(:env => 'dev', :system => 'lms', :options => '')
|
|
sh(django_admin(args.system, args.env, args.action, args.options))
|
|
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 "Imports all the templates from the code pack"
|
|
task :update_templates do
|
|
sh(django_admin(:cms, :dev, :update_templates))
|
|
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
|