97 lines
2.5 KiB
Ruby
Executable file
97 lines
2.5 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
# Non-blocking site rebuilding
|
|
trap("TSTP") do
|
|
fork do
|
|
require "open3"
|
|
first_run = true
|
|
Open3.popen3(%Q{cd "#{Dir.pwd}" && #{File.join(File.dirname(__FILE__), "mm-build")} | grep FORCED}) do |stdin, stdout, stderr|
|
|
puts "\n== Building the site..."
|
|
stdout.readlines.each do |l|
|
|
puts "== Updated:" if first_run
|
|
puts " " + l.split("[FORCED]").last.chomp
|
|
first_run = false
|
|
end
|
|
puts "== Build complete"
|
|
end
|
|
end
|
|
end
|
|
|
|
require 'optparse'
|
|
|
|
# Require Middleman
|
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
|
|
|
env = ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development'
|
|
options = { :Port => 4567, :AccessLog => [] }
|
|
|
|
OptionParser.new { |opts|
|
|
opts.banner = "Usage: mm-server [rack options]"
|
|
opts.separator ""
|
|
opts.separator "Rack options:"
|
|
opts.on("-p", "--port PORT", "use PORT (default: 4567)") { |port|
|
|
options[:Port] = port
|
|
}
|
|
opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
|
|
env = e
|
|
}
|
|
opts.on("--debug", "Debug mode") {
|
|
::Middleman::Server.set :logging, true
|
|
}
|
|
|
|
opts.parse! ARGV
|
|
}
|
|
|
|
ENV['RACK_ENV'] = env
|
|
|
|
@current_path = Dir.pwd
|
|
@path_parts = @current_path.split("/")
|
|
@found_root = false
|
|
|
|
while (!@found_root && (@path_parts.length > 0))
|
|
@current_path = File.join(*@path_parts)
|
|
|
|
public_folder = File.join(@current_path, "public")
|
|
views_folder = File.join(@current_path, "views")
|
|
|
|
if File.exists?(public_folder) && File.exists?(views_folder)
|
|
@found_root = true
|
|
next
|
|
end
|
|
|
|
@path_parts.pop
|
|
end
|
|
|
|
if !@found_root
|
|
$stderr.puts "== Error: Could not find a Middleman project structure, perhaps you are in the wrong folder?"
|
|
exit
|
|
end
|
|
|
|
# If the old init.rb exists, use it, but issue warning
|
|
old_config = File.join(@current_path, "init.rb")
|
|
if File.exists? old_config
|
|
$stderr.puts "== Error: The init.rb file (deprecated) needs to be be renamed to config.rb"
|
|
exit
|
|
end
|
|
|
|
|
|
# require 'shotgun'
|
|
# config = File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'config.ru')
|
|
# app = Shotgun.new(config, &lambda { |inner_app| Middleman::Server })
|
|
Middleman::Server.root = @current_path
|
|
app = Middleman::Server.new
|
|
|
|
require 'rubygems'
|
|
|
|
unless defined?(JRUBY_VERSION)
|
|
require 'thin'
|
|
handler = Rack::Handler::Thin
|
|
else
|
|
require 'kirk'
|
|
require 'rack/handler/kirk'
|
|
handler = Rack::Handler::Kirk
|
|
end
|
|
|
|
handler.run app, options do |inst|
|
|
puts "== The Middleman is standing watch on port #{options[:Port]}"
|
|
end
|