diff --git a/.gitignore b/.gitignore index b1a36e5f2e..4fd90cfe03 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ node_modules autodeploy.properties .ws_migrations_complete .vagrant/ +logs diff --git a/rakelib/helpers.rb b/rakelib/helpers.rb index 3373214a19..925b7e1b28 100644 --- a/rakelib/helpers.rb +++ b/rakelib/helpers.rb @@ -52,8 +52,14 @@ end # Runs Process.spawn, and kills the process at the end of the rake process # Expects the same arguments as Process.spawn -def background_process(*command) - pid = Process.spawn({}, *command, {:pgroup => true}) +def background_process(command, logfile=nil) + spawn_opts = {:pgroup => true} + if !logfile.nil? + puts "Running '#{command.join(' ')}', redirecting output to #{logfile}".red + spawn_opts[[:err, :out]] = [logfile, 'a'] + end + pid = Process.spawn({}, *command, spawn_opts) + command = [*command] at_exit do puts "Ending process and children" @@ -88,9 +94,10 @@ end # Runs a command as a background process, as long as no other processes # tagged with the same tag are running -def singleton_process(*command) +def singleton_process(command, logfile=nil) + command = [*command] if Sys::ProcTable.ps.select {|proc| proc.cmdline.include?(command.join(' '))}.empty? - background_process(*command) + background_process(command, logfile) else puts "Process '#{command.join(' ')} already running, skipping".blue end diff --git a/rakelib/jasmine.rake b/rakelib/jasmine.rake index ff72161937..5a0c4acedc 100644 --- a/rakelib/jasmine.rake +++ b/rakelib/jasmine.rake @@ -8,6 +8,11 @@ PREFERRED_METHOD = PHANTOMJS_PATH.nil? ? 'browser' : 'phantomjs' if PHANTOMJS_PATH.nil? puts("phantomjs not found on path. Set $PHANTOMJS_PATH. Using browser for jasmine tests".blue) end +LOGDIR = 'logs/jasmine' + +CLOBBER.include(LOGDIR) + +directory LOGDIR def django_for_jasmine(system, django_reload) if !django_reload @@ -17,7 +22,7 @@ def django_for_jasmine(system, django_reload) port = 10000 + rand(40000) jasmine_url = "http://localhost:#{port}/_jasmine/" - background_process(*django_admin(system, 'jasmine', 'runserver', '-v', '0', port.to_s, reload_arg).split(' ')) + background_process(django_admin(system, 'jasmine', 'runserver', '-v', '0', port.to_s, reload_arg).split(' '), "#{LOGDIR}/django.log") up = false start_time = Time.now @@ -80,7 +85,7 @@ end namespace :jasmine do namespace system do desc "Open jasmine tests for #{system} in your default browser" - task :browser => [:clean_reports_dir] do + task :browser => [:clean_reports_dir, LOGDIR] do Rake::Task[:assets].invoke(system, 'jasmine') django_for_jasmine(system, true) do |jasmine_url| jasmine_browser(jasmine_url) @@ -88,7 +93,7 @@ end end desc "Open jasmine tests for #{system} in your default browser, and dynamically recompile coffeescript" - task :'browser:watch' => [:clean_reports_dir, :'assets:coffee:_watch'] do + task :'browser:watch' => [:clean_reports_dir, :'assets:coffee:_watch', LOGDIR] do django_for_jasmine(system, true) do |jasmine_url| jasmine_browser(jasmine_url, jitter=0, wait=0) end @@ -97,7 +102,7 @@ end end desc "Use phantomjs to run jasmine tests for #{system} from the console" - task :phantomjs => [:clean_reports_dir] do + task :phantomjs => [:clean_reports_dir, LOGDIR] do Rake::Task[:assets].invoke(system, 'jasmine') phantomjs = ENV['PHANTOMJS_PATH'] || 'phantomjs' django_for_jasmine(system, false) do |jasmine_url|