#!/usr/bin/env ruby require 'rbbt-util' require 'rbbt/util/simpleopt' $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands options = SOPT.setup < -h--help Print this help -e--environment* Execution environment: production or development -Ho--Host* Host name -B--Bind* Bind IP -p--port* TCP port -s--server* Server type: thin, webrick, unicorn, etc -f--finder Start server with finder functionality -R--Rserve_session* Rserve session to use, otherwise start new one -wd--workdir* Change the working directory of the workflow -w--workflows* List of additional workflows to load --views* Directory with view templates --stream Activate streaming of workflow tasks --options* Additional options for server (e.g. option1=value1;option2=value2) EOF if options[:help] if defined? rbbt_usage rbbt_usage else puts SOPT.usage end exit 0 end if options[:workdir] require 'rbbt/workflow' Workflow.workdir = options[:workdir] end options[:Port] ||= options[:port] options[:Host] ||= "0.0.0.0" options[:Bind] ||= "0.0.0.0" workflow = ARGV.shift workflows = options[:workflows] || "" workflow = File.expand_path(workflow) if File.exist?(workflow) ENV["RServe-session"] = options[:RServe_session] || workflow server = options[:server] || 'puma' TmpFile.with_file do |app_dir| Misc.in_dir(app_dir) do app_dir = Path.setup(app_dir.dup) Open.write(app_dir.etc.target_workflow.find, workflow) Open.write(app_dir.etc.workflows.find, workflows.split(/,\s/)*"\n") if workflows require 'rack' ENV["RBBT_FINDER"] = "true" if options.include?(:finder) ENV["RACK_ENV"] = options[:environment] if options.include?(:environment) ENV["RBBT_VIEWS_DIR"] = options[:views] if options.include?(:views) if options[:stream] raise "No streaming available for any server other than puma" unless true or options[:server].include? 'puma' ENV["RBBT_WORKFLOW_TASK_STREAM"] = 'true' end config_ru_file = File.exist?('./workflow_config.ru') ? './config.ru' : Rbbt.share['workflow_config.ru'].find if options[:options] options[:options].split(";").each do |pair| name, _sep, value = pair.partition("=") name = name[1..-1].to_sym if name[0] == ':' options[name] = value end end case server when 'unicorn' `env RBBT_LOG=#{Log.severity.to_s} unicorn -c #{ Rbbt.share['unicorn.rb'].find } '#{config_ru_file}' -p #{options[:port] || "2887"}` when 'puma_alt' #`puma '#{config_ru_file}' -p #{options[:Port] || "2887"} -w 3 -t 8:32 --preload` `env RBBT_LOG=#{Log.severity.to_s} puma '#{config_ru_file}' -p #{options[:Port] || "2887"} -w 20 -t 10:160 --preload` else options[:config] = config_ru_file Rack::Server.start(options) end end end