discourse/bin/unicorn
Sam 0241748876
DEV: ember-cli -u can be used to run a standalone dev discourse (#13336)
Previously we would need to launch unicorn separately this achieves
the same goal by making 2 modifications:

1. If -u is supplied ember-cli binary will launch and monitor ember cli and unicorn
2. We suppress 200 requests to keep console clean (we may consider moving to development rails logs)


Also cleans out output a bit by supplying silent flags to yarn.
2021-06-09 12:44:33 +10:00

118 lines
3.0 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
RAILS_ROOT = File.expand_path("../../", Pathname.new(__FILE__).realpath)
if defined? Bundler
STDERR.puts <<~MESSAGE
WARNING: Using `bundle exec` to start the server is unnecessary, and will make startup slower. Use `bin/rails s` or `bin/unicorn`.
MESSAGE
end
require 'rubygems'
require 'bundler/setup'
require 'digest'
require 'fileutils'
dev_mode = false
def ensure_cache_clean!
_all_plugin_directories = Pathname.new(RAILS_ROOT + '/plugins').children.select(&:directory?)
core_git_sha = `git rev-parse HEAD`.strip
plugins_combined_git_sha = `git ls-files -s plugins | git hash-object --stdin`.strip
super_sha = Digest::SHA1.hexdigest(core_git_sha + plugins_combined_git_sha)
hash_file = "#{RAILS_ROOT}/tmp/plugin-hash"
old_hash = File.exists?(hash_file) ? File.read(hash_file) : nil
if old_hash && old_hash != super_sha
puts "WARNING: It looks like your discourse plugins or core version have recently changed."
puts "The tmp/cache directory will be wiped to avoid development issues."
`rm -rf #{RAILS_ROOT}/tmp/cache`
puts
end
FileUtils.mkdir_p(RAILS_ROOT + "/tmp")
File.write(hash_file, super_sha)
end
# 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"
ensure_cache_clean!
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
$unicorn_dev_supervisor_pid = Process.pid # rubocop:disable Style/GlobalVars
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