Clone
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler/setup'
Bundler.require
require 'optparse'
server_options = { address: '0.0.0.0', port: 8080 }
options = {
adapter: {
name: :filesystem,
path: ENV['SITE_PATH'] || File.join(File.dirname(__FILE__), '../spec/fixtures/default')
},
log_file: nil
}
OptionParser.new do |opts|
opts.banner = 'Usage: steam.rb [options]'
# Filesystem adapter
opts.on('--path PATH', 'Serve a Wagon site from a path in your filesystem') do |path|
options[:adapter][:path] = File.expand_path(path)
options[:asset_path] = File.expand_path(File.join(path, 'public'))
options[:database] = options[:hosts] = nil
end
# MongoDB adapter
opts.on('-d', '--database DATABASE', 'Serve a Wagon site from a MongoDB database') do |database|
options[:adapter].merge!(name: :'mongoDB', database: database)
options[:adapter][:hosts] ||= ['127.0.0.1']
options[:adapter].delete(:path)
end
opts.on('--hosts x,y,z', Array, 'Specify the MongoDB hosts') do |hosts|
options[:adapter][:hosts] = hosts
end
# Assets path
opts.on('-a', '--assets-path ASSETS_PATH', 'Tell Steam where to find the assets (if local)') do |path|
options[:asset_path] = path
end
# Asset host
opts.on('-h', '--asset-host HOST', 'Required if the assets are stored on Amazon S3 or through a CDN') do |host|
options[:asset_host]
end
# TCP port
opts.on('-p', '--port PORT', 'Run the HTTP server on the specified port (by default: 8080') do |port|
server_options[:port] = port
end
# Logger
opts.on('-l', '--log-file LOG_FILE', 'Log file of the Steam server') do |file|
options[:log_file] = File.expand_path(file)
end
# Help
opts.on_tail('-h', '--help', 'Show this message') do
puts opts
exit
end
end.parse!
require_relative '../lib/locomotive/steam'
require_relative '../lib/locomotive/steam/server'
Locomotive::Steam.configure do |config|
config.mode = :test
config.adapter = options[:adapter]
config.serve_assets = options[:asset_path].present?
config.asset_path = options[:asset_path]
config.asset_host = options[:asset_host]
config.minify_assets = false
end
Locomotive::Common.reset
Locomotive::Common.configure do |config|
config.notifier = Locomotive::Common::Logger.setup(options[:log_file])
end
app = Locomotive::Steam.to_app
# Thin rack handler
# Note: alt thin settings (Threaded)
# require 'thin'
# server = Thin::Server.new(server_options[:address], server_options[:port], app)
# server.threaded = true
# server.start
# Locomotive::Common::Logger.info 'Server started...'
# FIXME: Rack::Handler::Thin.run app (not threaded)
# WEBRick rack handler
# Rack::Handler::WEBrick.run app
# Locomotive::Common::Logger.info 'Server started...'
# Puma rack handler
require 'puma'
server = ::Puma::Server.new(app)
server.add_tcp_listener server_options[:address], server_options[:port]
server.min_threads = 4
server.max_threads = 16
begin
Locomotive::Common::Logger.info 'Server started...'
server.run.join
rescue Interrupt
server.stop(true)
end