aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakumi IINO <trot.thunder@gmail.com>2015-04-11 01:14:57 +0900
committerRafael Mendonça França <rafaelmfranca@gmail.com>2015-04-14 13:06:20 -0400
commitb126e7aaaa61c9264481e52053c43d624fef2034 (patch)
treef755d496fe2a1cf8966d039e1c6e18b4868ad8b4
parent4c665b8deddb32e6af886d1129ef2844c69c5a1f (diff)
downloadrails-b126e7aaaa61c9264481e52053c43d624fef2034.tar.gz
rails-b126e7aaaa61c9264481e52053c43d624fef2034.tar.bz2
rails-b126e7aaaa61c9264481e52053c43d624fef2034.zip
avoid double initialization error caused to sidekiq
Sidekiq::CLI#boot_system require "#{dummy_app_path}/config/environment.rb". But this file has already been required in'test/support/integration/helper.rb'. This patch will change to use Sidekiq::Launcher directly.
-rw-r--r--activejob/test/support/integration/adapters/sidekiq.rb47
1 files changed, 34 insertions, 13 deletions
diff --git a/activejob/test/support/integration/adapters/sidekiq.rb b/activejob/test/support/integration/adapters/sidekiq.rb
index 6ff18fb56a..dd24b3abf2 100644
--- a/activejob/test/support/integration/adapters/sidekiq.rb
+++ b/activejob/test/support/integration/adapters/sidekiq.rb
@@ -1,4 +1,3 @@
-require 'sidekiq/cli'
require 'sidekiq/api'
module SidekiqJobsManager
@@ -18,23 +17,45 @@ module SidekiqJobsManager
def start_workers
fork do
- sidekiq = Sidekiq::CLI.instance
logfile = Rails.root.join("log/sidekiq.log").to_s
pidfile = Rails.root.join("tmp/sidekiq.pid").to_s
- sidekiq.parse([ "--require", Rails.root.to_s,
- "--queue", "integration_tests",
- "--logfile", logfile,
- "--pidfile", pidfile,
- "--environment", "test",
- "--concurrency", "1",
- "--timeout", "1",
- "--daemon",
- ])
+ ::Process.daemon(true, true)
+ [$stdout, $stderr].each do |io|
+ File.open(logfile, 'ab') do |f|
+ io.reopen(f)
+ end
+ io.sync = true
+ end
+ $stdin.reopen('/dev/null')
+ Sidekiq::Logging.initialize_logger(logfile)
+ File.open(File.expand_path(pidfile), 'w') do |f|
+ f.puts ::Process.pid
+ end
+
+ self_read, self_write = IO.pipe
+ trap "TERM" do
+ self_write.puts("TERM")
+ end
+
require 'celluloid'
- require 'sidekiq/scheduled'
+ require 'sidekiq/launcher'
+ sidekiq = Sidekiq::Launcher.new({queues: ["integration_tests"],
+ environment: "test",
+ concurrency: 1,
+ timeout: 1,
+ })
Sidekiq.poll_interval = 0.5
Sidekiq::Scheduled.const_set :INITIAL_WAIT, 1
- sidekiq.run
+ begin
+ sidekiq.run
+ while readable_io = IO.select([self_read])
+ signal = readable_io.first[0].gets.strip
+ raise Interrupt if signal == "TERM"
+ end
+ rescue Interrupt
+ sidekiq.stop
+ exit(0)
+ end
end
sleep 1
end