Blob of script/task_performer (raw blob data)

1 #!/usr/bin/env ruby
2
3 require 'tmpdir'
4 require "fileutils"
5
6 LOCK_FILE_PATH = File.join(Dir.tmpdir, "gitorious_task_lockfile")
7 ENV["PATH"] = "/usr/local/bin/:/opt/local/bin:#{ENV["PATH"]}"
8
9 if File.exist?(LOCK_FILE_PATH)
10 $stderr.puts "Task lockfile '#{LOCK_FILE_PATH}' exists!"
11 exit(1)
12 end
13
14 ENV["RAILS_ENV"] ||= "production"
15 require File.dirname(__FILE__) + "/../config/environment"
16
17
18 class TaskLockError < StandardError; end
19
20 def with_lock(&block)
21 begin
22 if File.exist?(LOCK_FILE_PATH)
23 raise TaskLockError
24 end
25 FileUtils.touch(LOCK_FILE_PATH)
26 yield
27 FileUtils.rm(LOCK_FILE_PATH)
28 rescue TaskLockError
29 $stderr.puts "Task lockfile exists"
30 exit(1)
31 end
32 end
33
34 with_lock do
35 log = Logger.new(File.join(RAILS_ROOT, "log", "tasks.log"))
36 log.formatter = Logger::Formatter.new
37 log.level = Logger::INFO
38 log.formatter.datetime_format = "%Y-%m-%d %H:%M:%S"
39 begin
40 Task.perform_all_pending!(log)
41 rescue => e
42 exception_backtrace_string = "#{e.class.name} #{e.message}\n#{e.backtrace.join("\n ")}"
43 log.fatal exception_backtrace_string
44 $stderr.puts exception_backtrace_string
45 exit(1)
46 end
47 end