mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 01:33:24 +08:00
5998e69b9c
On new macs, `localhost` resolves to IPV6 of `::1` and unfortunately unicorn doesn't bind to IPv6 by default. This seems to be the path of least resistance. By using 127.0.0.1 we force IPv4 which works great.
79 lines
1.9 KiB
Ruby
Executable File
79 lines
1.9 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require 'pathname'
|
|
|
|
RAILS_ROOT = File.expand_path("../../", Pathname.new(__FILE__).realpath)
|
|
PORT = ENV["UNICORN_PORT"] ||= "3000"
|
|
HOSTNAME = ENV["DISCOURSE_HOSTNAME"] ||= "127.0.0.1"
|
|
yarn_dir = File.join(RAILS_ROOT, "app/assets/javascripts/discourse")
|
|
|
|
PROXY =
|
|
if ARGV.include?("--try")
|
|
"https://try.discourse.org"
|
|
else
|
|
"http://#{HOSTNAME}:#{PORT}"
|
|
end
|
|
|
|
command =
|
|
if ARGV.include?("--test")
|
|
"test"
|
|
else
|
|
"server"
|
|
end
|
|
|
|
class String
|
|
def cyan
|
|
"\e[36m#{self}\e[0m"
|
|
end
|
|
end
|
|
|
|
if ARGV.include?("-h") || ARGV.include?("--help")
|
|
puts "ember-cli OPTIONS"
|
|
puts "#{"--try".cyan} To proxy try.discourse.org"
|
|
puts "#{"--test".cyan} To run the test suite"
|
|
puts "#{"--unicorn, -u".cyan} To run a unicorn server as well"
|
|
puts "The rest of the arguments are passed to ember server per:", ""
|
|
exec "yarn -s --cwd #{yarn_dir} run ember #{command} --help"
|
|
end
|
|
|
|
args = ["-s", "--cwd", yarn_dir, "run", "ember", command] + ARGV.reject do |a|
|
|
["--try", "--test", "--unicorn", "-u"].include?(a)
|
|
end
|
|
|
|
if !args.include?("test") && !args.include?("--proxy")
|
|
args << "--proxy"
|
|
args << PROXY
|
|
end
|
|
|
|
system "yarn -s install --cwd #{yarn_dir}"
|
|
|
|
if ARGV.include?("-u") || ARGV.include?("--unicorn")
|
|
unicorn_env = { "DISCOURSE_PORT" => ENV["DISCOURSE_PORT"] || "4200" }
|
|
unicorn_pid = spawn(unicorn_env, __dir__ + "/unicorn")
|
|
|
|
Thread.new do
|
|
require 'open3'
|
|
Open3.popen2e("yarn", *args.to_a.flatten) do |i, oe, t|
|
|
puts "Ember CLI running on PID: #{t.pid}"
|
|
oe.each do |line|
|
|
if line.include?("\e[32m200\e") || line.include?("\e[36m304\e[0m") || line.include?("POST /message-bus")
|
|
# skip 200s and 304s and message bus
|
|
else
|
|
puts line
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
trap("SIGINT") do
|
|
# we got to swallow sigint to give time for
|
|
# children to handle it
|
|
end
|
|
|
|
Process.wait(unicorn_pid)
|
|
|
|
else
|
|
exec "yarn", *args.to_a.flatten
|
|
end
|