From c0ba3e2946ace0b50890c49788cd47feaafd4897 Mon Sep 17 00:00:00 2001 From: Thomas Reynolds Date: Tue, 20 Dec 2011 17:03:36 -0800 Subject: [PATCH] early attempt to fix jruby --- .travis.yml | 1 + lib/middleman.rb | 13 ++++- lib/middleman/core_extensions/sprockets.rb | 1 - lib/middleman/guard.rb | 67 +++++++++++++--------- middleman-x86-mingw32.gemspec | 2 - middleman.gemspec | 2 - 6 files changed, 52 insertions(+), 34 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0a20771c..42d69998 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,5 @@ rvm: - 1.8.7 - 1.9.2 - 1.9.3 + - jruby script: "bundle exec rake test" \ No newline at end of file diff --git a/lib/middleman.rb b/lib/middleman.rb index 5f6a02cf..c84d559e 100755 --- a/lib/middleman.rb +++ b/lib/middleman.rb @@ -1,9 +1,14 @@ +require "rbconfig" + # Setup our load paths libdir = File.dirname(__FILE__) $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) # Top-level Middleman object module Middleman + WINDOWS = !!(RUBY_PLATFORM =~ /(mingw|bccwin|wince|mswin32)/i) + JRUBY = !!(RbConfig::CONFIG["RUBY_INSTALL_NAME"] =~ /^jruby/i) + # Auto-load modules on-demand autoload :Base, "middleman/base" autoload :Cache, "middleman/cache" @@ -225,7 +230,13 @@ module Middleman app_class = options[:app] ||= ::Middleman.server.inst opts[:app] = app_class - opts[:server] = 'thin' + opts[:server] = if ::Middleman::JRUBY + 'webrick' # Maybe Kirk? + else + require "thin" + ::Thin::Logging.silent = !options[:is_logging] + 'thin' + end server = ::Rack::Server.new(opts) server.start diff --git a/lib/middleman/core_extensions/sprockets.rb b/lib/middleman/core_extensions/sprockets.rb index 56af19f6..32bee098 100644 --- a/lib/middleman/core_extensions/sprockets.rb +++ b/lib/middleman/core_extensions/sprockets.rb @@ -1,5 +1,4 @@ require 'pathname' -require 'rbconfig' require "sprockets" module Middleman::CoreExtensions::Sprockets diff --git a/lib/middleman/guard.rb b/lib/middleman/guard.rb index c6f99220..650c8ec0 100644 --- a/lib/middleman/guard.rb +++ b/lib/middleman/guard.rb @@ -6,8 +6,7 @@ require "guard/guard" require "net/http" # Support forking on Windows -require "rbconfig" -require "win32/process" if RbConfig::CONFIG['host_os'].downcase =~ %r{mingw} +require "win32/process" if Middleman::WINDOWS module Middleman::Guard def self.start(options={}) @@ -42,36 +41,50 @@ module Guard def initialize(watchers = [], options = {}) super @options = options + + # Trap the interupt signal and shut down Guard (and thus the server) smoothly + trap(kill_command) do + ::Guard.stop + exit!(0) + end end # Start Middleman in a fork def start - @server_job = fork do - env = (@options[:environment] || "development").to_sym - is_logging = @options.has_key?(:debug) && (@options[:debug] == "true") - app = ::Middleman.server.inst do - set :environment, env - set :logging, is_logging - end - - require "thin" - ::Thin::Logging.silent = !is_logging - - app_rack = app.class.to_rack_app - - opts = @options.dup - opts[:app] = app_rack - puts "== The Middleman is standing watch on port #{opts[:port]||4567}" - ::Middleman.start_server(opts) + if ::Middleman::JRUBY + thread = Thread.new { bootup } + thread.join + else + @server_job = fork { bootup } end end + def bootup + env = (@options[:environment] || "development").to_sym + is_logging = @options.has_key?(:debug) && (@options[:debug] == "true") + app = ::Middleman.server.inst do + set :environment, env + set :logging, is_logging + end + + app_rack = app.class.to_rack_app + + opts = @options.dup + opts[:app] = app_rack + opts[:logging] = is_logging + puts "== The Middleman is standing watch on port #{opts[:port]||4567}" + ::Middleman.start_server(opts) + end + # Stop the forked Middleman def stop puts "== The Middleman is shutting down" - Process.kill("KILL", @server_job) - Process.wait @server_job - @server_job = nil + if ::Middleman::JRUBY + else + Process.kill(kill_command, @server_job) + Process.wait @server_job + @server_job = nil + end end # Simply stop, then start @@ -116,11 +129,9 @@ module Guard uri = URI.parse("http://#{@options[:host]}:#{@options[:port]}/__middleman__") Net::HTTP.post_form(uri, {}.merge(params)) end + + def kill_command + ::Middleman::WINDOWS ? 1 : :INT + end end -end - -# Trap the interupt signal and shut down Guard (and thus the server) smoothly -trap(:INT) do - ::Guard.stop - exit end \ No newline at end of file diff --git a/middleman-x86-mingw32.gemspec b/middleman-x86-mingw32.gemspec index 6a534198..8c39cf68 100644 --- a/middleman-x86-mingw32.gemspec +++ b/middleman-x86-mingw32.gemspec @@ -1,6 +1,4 @@ # -*- encoding: utf-8 -*- -require "rbconfig" - $:.push File.expand_path("../lib", __FILE__) require "middleman/version" diff --git a/middleman.gemspec b/middleman.gemspec index aa5e2e85..238e06e5 100644 --- a/middleman.gemspec +++ b/middleman.gemspec @@ -1,6 +1,4 @@ # -*- encoding: utf-8 -*- -require "rbconfig" - $:.push File.expand_path("../lib", __FILE__) require "middleman/version"