require 'optparse' Dir.chdir(File.dirname(__FILE__)) Encoding.default_external = "utf-8" class CommandRunner def self.run OptionParser.new do |opts| opts.banner = "Usage: yodel [options] server|dns|console|migrate|setup|deploy" opts.on('-p', '--port PORT', Integer, 'Override the default web server port') do |port| $web_port = port end opts.on('-e', '--environment ENV', 'Web server environment (default development)', 'development', 'production') do |env| $env = env end opts.on('-s', '--settings FILE', 'Load this settings file (default: /usr/local/etc/yodel/settings.rb)') do |settings| $settings = settings end opts.on('-x', '--extensions PATH', 'Load extensions from the supplied folder, rather than from installed gems') do |path| $extensions_folder = path end opts.on('-r', '--reload', 'Reloads the server whenever any framework source files are modified') do $reload = true end opts.on('-h', '--help', 'Display this screen') do puts opts exit end end.parse! command = ARGV.shift case command when 'server' require '../requires' require '../middleware/development_server' Yodel.config.extensions_folder = $extensions_folder if $extensions_folder Yodel.config.web_port = $web_port if $web_port if $env == 'production' Yodel.env.production! else Yodel.env.development! end if $reload Rack::Server.start(app: DevelopmentServer.new, Port: Yodel.config.web_port) else require File.expand_path('../../yodel') Rack::Server.start(app: Application.new, Port: Yodel.config.web_port) end when 'dns' require '../requires' require './dns_server' DNSServer.start when 'console' require '../../yodel' require 'irb' Yodel.config.extensions_folder = $extensions_folder if $extensions_folder $application = Application.new IRB.start(__FILE__) when 'migrate' require '../../yodel' Yodel.config.extensions_folder = $extensions_folder if $extensions_folder $application = Application.new Site.all.each do |site| Migration.run_migrations(site) end when 'deploy' require '../../yodel' Yodel.config.extensions_folder = $extensions_folder if $extensions_folder require './deploy' Deploy.new.deploy_site when 'setup' require './installer' Installer.new.install_system_files else puts "Unknown command: #{command}" end end end