require 'war_config' require 'fileutils' module War class Runner attr_accessor :config attr_accessor :jetty_main attr_accessor :jetty_tmp attr_accessor :jetty_config attr_accessor :war_override attr_accessor :classpath def initialize(config = Configuration.instance) puts config.jetty_java_opts @config = config @jetty_main = 'org.mortbay.start.Main' @jetty_tmp = File.join('tmp', 'jetty') @jetty_config = File.join(jetty_tmp, 'jetty.xml') @war_override = File.join(jetty_tmp, 'war-override.xml') end def run_standalone @config.standalone = true run end def run add_jetty_libraries add_jetty_config add_war_override classpath_string = classpath.join(config.os_path_separator) java_opts = config.jetty_java_opts.dup java_opts << ' -Xmx128m' unless java_opts =~ /-Xmx/ java_opts << " -Djetty.port=#{config.jetty_port}" unless java_opts =~ /jetty.port/ cmd = "java #{java_opts} -cp \"#{classpath_string}\" #{jetty_main} #{jetty_config}" puts cmd system(cmd) end def add_war_override # always create a new override file, regardless of whether one exists File.open(war_override, 'w') { |out| out << create_war_override } end def create_war_override require 'erb' template = < rails.env <%= config.rails_env_embedded %> END_OF_WEB_INF_OVERRIDE erb = ERB.new(template) erb.result(binding) end def add_jetty_libraries # Get the Jetty libraries @classpath = [] File.makedirs(jetty_tmp) for lib in config.jetty_libraries.values target = File.join(jetty_tmp, lib.file) unless File.exists?(target) puts "Downloading #{lib.file}..." lib.install(config, target) end @classpath << target end end def add_jetty_config # Create the configuration jetty_user_config = File.join('config', 'jetty.xml') jetty_config_data = File.read(jetty_user_config) if File.exists?(jetty_user_config) jetty_config_data ||= create_jetty_config File.open(jetty_config, 'w') { |out| out << jetty_config_data } end def create_jetty_config require 'erb' template = < 10 50 250 30000 2 8443 <%= config.staging %> /<%= config.name %> org.mortbay.jetty.webapp.WebInfConfiguration org.mortbay.jetty.plus.webapp.EnvConfiguration org.mortbay.jetty.plus.webapp.Configuration org.mortbay.jetty.webapp.JettyWebXmlConfiguration org.mortbay.jetty.webapp.TagLibConfiguration <%= war_override %> log/jetty.request.log true false GMT true true END_OF_JETTY_XML erb = ERB.new(template) erb.result(binding) end end #class end #module