#!/usr/bin/env ruby # frozen_string_literal: true require 'pathname' ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) require 'rubygems' require 'bundler/setup' dev_mode = false # in development do some fussing around, to automate config if !ARGV.include?("-E") && !ARGV.include?("--env") && (ENV["RAILS_ENV"] == "development" || !ENV["RAILS_ENV"]) dev_mode = true ARGV.push("-N") if !ARGV.include?("-c") && !ARGV.include?("--config-file") ARGV.push("-c") ARGV.push(File.expand_path("../../config/unicorn.conf.rb", Pathname.new(__FILE__).realpath)) end # we do not want to listen on 2 ports, so lets fix it if (idx = ARGV.index("-p")) && (port = ARGV[idx + 1].to_i) > 0 ENV["UNICORN_PORT"] ||= port.to_s end ENV["UNICORN_PORT"] ||= "9292" if ARGV.delete("-x") puts "Running without sidekiq" ENV["UNICORN_SIDEKIQS"] = "0" end ENV["UNICORN_SIDEKIQS"] ||= "1" end if ARGV.include?("--help") fork do load Gem.bin_path('unicorn', 'unicorn') end Process.wait puts "Extra Discourse Options:" puts " -x run without sidekiq" exit end # this dev_mode hackery enables, the following to be used to restart unicorn: # # pkill -USR2 -f 'ruby bin/unicorn' # # This is handy if you want to bind a key to restarting unicorn in dev if dev_mode restart = true while restart restart = false pid = fork do load Gem.bin_path('unicorn', 'unicorn') end done = false Signal.trap('INT') do # wait for parent to be done end Signal.trap('USR2') do Process.kill('QUIT', pid) puts "RESTARTING UNICORN" restart = true end while !done sleep 1 done = Process.waitpid(pid, Process::WNOHANG) end end else load Gem.bin_path('unicorn', 'unicorn') end