1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- require 'thread'
- require 'huginn_scheduler'
- require 'twitter_stream'
- Rails.configuration.cache_classes = true
- STDOUT.sync = true
- STDERR.sync = true
- def stop
- puts 'Exiting...'
- @scheduler.stop
- @dj.stop
- @stream.stop
- end
- def safely(&block)
- begin
- yield block
- rescue StandardError => e
- STDERR.puts "\nException #{e.message}:\n#{e.backtrace.join("\n")}\n\n"
- STDERR.puts "Terminating myself ..."
- STDERR.flush
- stop
- end
- end
- threads = []
- threads << Thread.new do
- safely do
- @stream = TwitterStream.new
- @stream.run
- puts "Twitter stream stopped ..."
- end
- end
- threads << Thread.new do
- safely do
- @scheduler = HuginnScheduler.new(frequency: ENV['SCHEDULER_FREQUENCY'].presence || 0.3)
- @scheduler.run!
- puts "Scheduler stopped ..."
- end
- end
- threads << Thread.new do
- safely do
- require 'delayed/command'
- @dj = Delayed::Worker.new
- @dj.start
- puts "Delayed job stopped ..."
- end
- end
- # We need to wait a bit to let delayed_job set it's traps so we can override them
- sleep 0.5
- trap('TERM') do
- stop
- end
- trap('INT') do
- stop
- end
- threads.collect { |t| t.join }
|