mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 11:13:22 +08:00
0241748876
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.
118 lines
3.0 KiB
Ruby
Executable File
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
|