#!/usr/bin/env ruby # frozen_string_literal: true gem_name = 'diversipub' gem_root = File.expand_path('..', __dir__).freeze begin require gem_name rescue LoadError lib = File.join(gem_root, 'lib').freeze file = File.join lib, "#{gem_name}.rb" $LOAD_PATH.unshift lib if File.file?(file) && !$LOAD_PATH.include?(lib) require gem_name end # Clean common ENVs ENV.delete 'APP_ENV' ENV.delete 'RACK_ENV' ENV.delete 'RAILS_ENV' # Clean Puma ENVs ENV.delete 'LISTEN_FDS' ENV.delete 'LISTEN_PID' ENV.delete 'MAX_THREADS' ENV.delete 'MIN_THREADS' ENV.delete 'NOTIFY_SOCKET' ENV.delete 'PUMA_BUNDLER_PRUNED' ENV.delete 'PUMA_DEBUG' ENV.delete 'PUMA_LOG_CONFIG' ENV.delete 'PUMA_MAX_THREADS' ENV.delete 'PUMA_MIN_THREADS' ENV.delete 'SCRIPT_NAME' ENV.delete 'WATCHDOG_PID' ENV.delete 'WATCHDOG_USEC' ENV.delete 'WEB_CONCURRENCY' # Clean Rack ENVs ENV.delete 'RACK_MULTIPART_FILE_LIMIT' ENV.delete 'RACK_MULTIPART_PART_LIMIT' ENV.delete 'RACK_MULTIPART_TOTAL_PART_LIMIT' # Freeze well-known constants ARGV.each(&:freeze).freeze ENV.each_key(&:freeze).each_value(&:freeze) # ENV itself can't be frozen # Freeze well-known globals $ARGV&.each(&:freeze).freeze # $ARGV is nil sometimes $LOAD_PATH.each(&:freeze).freeze # Some hacks module Puma def self.forkable? = false end # Non-buffered output $stdout.sync = true $stderr.sync = true main = Diversipub::Main.new( gem_root: gem_root, pwd: Pathname.pwd, program_name: $PROGRAM_NAME, argv: ARGV, env: ENV, stdin: $stdin, stdout: $stdout, stderr: $stderr, ) trap('INT') { main.stop_gracefully } if Signal.list['INT'] trap('TERM') { main.stop_urgently } if Signal.list['TERM'] exit main.run