Class: Puma::Configuration
- Inherits:
-
Object
- Object
- Puma::Configuration
- Includes:
- ConfigDefault
- Defined in:
- lib/puma/configuration.rb
Overview
The main configuration class of Puma.
It can be initialized with a set of “user” options and “default” options. Defaults will be merged with ‘Configuration.puma_default_options`.
This class works together with 2 main other classes the ‘UserFileDefaultOptions` which stores configuration options in order so the precedence is that user set configuration wins over “file” based configuration wins over “default” configuration. These configurations are set via the `DSL` class. This class powers the Puma config file syntax and does double duty as a configuration DSL used by the `Puma::CLI` and Puma rack handler.
It also handles loading plugins.
- Note:
-
‘:port` and `:host` are not valid keys. By the time they make it to the configuration options they are expected to be incorporated into a `:binds` key. Under the hood the DSL maps `port` and `host` calls to `:binds`
config = Configuration.new({}) do |user_config, file_config, default_config| user_config.port 3003 end config.load puts config.[:port] # => 3003
It is expected that ‘load` is called on the configuration instance after setting config. This method expands any values in `config_file` and puts them into the correct configuration option hash.
Once all configuration is complete it is expected that ‘clamp` will be called on the instance. This will expand any procs stored under “default” values. This is done because an environment variable may have been modified while loading configuration files.
Defined Under Namespace
Classes: ConfigMiddleware
Constant Summary
Constants included from ConfigDefault
Puma::ConfigDefault::DefaultRackup, Puma::ConfigDefault::DefaultTCPHost, Puma::ConfigDefault::DefaultTCPPort, Puma::ConfigDefault::DefaultWorkerShutdownTimeout, Puma::ConfigDefault::DefaultWorkerTimeout
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#plugins ⇒ Object
readonly
Returns the value of attribute plugins.
Class Method Summary collapse
Instance Method Summary collapse
-
#app ⇒ Object
Load the specified rackup file, pull options from the rackup file, and set @app.
-
#app_configured? ⇒ Boolean
Indicate if there is a properly configured app.
-
#clamp ⇒ Object
Call once all configuration (included from rackup files) is loaded to flesh out any defaults.
- #config_files ⇒ Object
- #configure ⇒ Object
- #default_max_threads ⇒ Object
-
#environment ⇒ Object
Return which environment we’re running in.
- #environment_str ⇒ Object
- #final_options ⇒ Object
- #flatten ⇒ Object
- #flatten! ⇒ Object
-
#initialize(user_options = {}, default_options = {}, &block) ⇒ Configuration
constructor
A new instance of Configuration.
- #initialize_copy(other) ⇒ Object
- #load ⇒ Object
- #load_plugin(name) ⇒ Object
- #puma_default_options ⇒ Object
- #rackup ⇒ Object
- #run_hooks(key, arg, events) ⇒ Object
Constructor Details
#initialize(user_options = {}, default_options = {}, &block) ⇒ Configuration
Returns a new instance of Configuration.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/puma/configuration.rb', line 140 def initialize(={}, = {}, &block) = self..merge() @options = UserFileDefaultOptions.new(, ) @plugins = PluginLoader.new @user_dsl = DSL.new(@options., self) @file_dsl = DSL.new(@options., self) @default_dsl = DSL.new(@options., self) if !@options[:prune_bundler] [:preload_app] = (@options[:workers] > 1) && Puma.forkable? end if block configure(&block) end end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
158 159 160 |
# File 'lib/puma/configuration.rb', line 158 def @options end |
#plugins ⇒ Object (readonly)
Returns the value of attribute plugins.
158 159 160 |
# File 'lib/puma/configuration.rb', line 158 def plugins @plugins end |
Class Method Details
.temp_path ⇒ Object
306 307 308 309 310 311 |
# File 'lib/puma/configuration.rb', line 306 def self.temp_path require 'tmpdir' t = (Time.now.to_f * 1000).to_i "#{Dir.tmpdir}/puma-status-#{t}-#{$$}" end |
Instance Method Details
#app ⇒ Object
Load the specified rackup file, pull options from the rackup file, and set @app.
266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/puma/configuration.rb', line 266 def app found = [:app] || load_rackup if @options[:log_requests] require 'puma/commonlogger' logger = @options[:logger] found = CommonLogger.new(found, logger) end ConfigMiddleware.new(self, found) end |
#app_configured? ⇒ Boolean
Indicate if there is a properly configured app
255 256 257 |
# File 'lib/puma/configuration.rb', line 255 def app_configured? @options[:app] || File.exist?(rackup) end |
#clamp ⇒ Object
Call once all configuration (included from rackup files) is loaded to flesh out any defaults
236 237 238 |
# File 'lib/puma/configuration.rb', line 236 def clamp @options.finalize_values end |
#config_files ⇒ Object
221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/puma/configuration.rb', line 221 def config_files files = @options.all_of(:config_files) return [] if files == ['-'] return files if files.any? first_default_file = %W(config/puma/#{environment_str}.rb config/puma.rb).find do |f| File.exist?(f) end [first_default_file] end |
#configure ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/puma/configuration.rb', line 160 def configure yield @user_dsl, @file_dsl, @default_dsl ensure @user_dsl._offer_plugins @file_dsl._offer_plugins @default_dsl._offer_plugins end |
#default_max_threads ⇒ Object
184 185 186 |
# File 'lib/puma/configuration.rb', line 184 def default_max_threads Puma.mri? ? 5 : 16 end |
#environment ⇒ Object
Return which environment we’re running in
279 280 281 |
# File 'lib/puma/configuration.rb', line 279 def environment @options[:environment] end |
#environment_str ⇒ Object
283 284 285 |
# File 'lib/puma/configuration.rb', line 283 def environment_str environment.respond_to?(:call) ? environment.call : environment end |
#final_options ⇒ Object
302 303 304 |
# File 'lib/puma/configuration.rb', line 302 def @options. end |
#flatten ⇒ Object
174 175 176 |
# File 'lib/puma/configuration.rb', line 174 def flatten dup.flatten! end |
#flatten! ⇒ Object
178 179 180 181 |
# File 'lib/puma/configuration.rb', line 178 def flatten! @options = @options.flatten self end |
#initialize_copy(other) ⇒ Object
168 169 170 171 172 |
# File 'lib/puma/configuration.rb', line 168 def initialize_copy(other) @conf = nil @cli_options = nil @options = @options.dup end |
#load ⇒ Object
215 216 217 218 219 |
# File 'lib/puma/configuration.rb', line 215 def load config_files.each { |config_file| @file_dsl._load_from(config_file) } @options end |
#load_plugin(name) ⇒ Object
287 288 289 |
# File 'lib/puma/configuration.rb', line 287 def load_plugin(name) @plugins.create name end |
#puma_default_options ⇒ Object
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/puma/configuration.rb', line 188 def { :min_threads => Integer(ENV['PUMA_MIN_THREADS'] || ENV['MIN_THREADS'] || 0), :max_threads => Integer(ENV['PUMA_MAX_THREADS'] || ENV['MAX_THREADS'] || default_max_threads), :log_requests => false, :debug => false, :binds => ["tcp://#{DefaultTCPHost}:#{DefaultTCPPort}"], :workers => Integer(ENV['WEB_CONCURRENCY'] || 0), :silence_single_worker_warning => false, :mode => :http, :worker_timeout => DefaultWorkerTimeout, :worker_boot_timeout => DefaultWorkerTimeout, :worker_shutdown_timeout => DefaultWorkerShutdownTimeout, :remote_address => :socket, :tag => method(:infer_tag), :environment => -> { ENV['RACK_ENV'] || ENV['RAILS_ENV'] || "development" }, :rackup => DefaultRackup, :logger => STDOUT, :persistent_timeout => Const::PERSISTENT_TIMEOUT, :first_data_timeout => Const::FIRST_DATA_TIMEOUT, :raise_exception_on_sigterm => true, :max_fast_inline => Const::MAX_FAST_INLINE, :io_selector_backend => :auto, :mutate_stdout_and_stderr_to_sync_on_write => true, } end |
#rackup ⇒ Object
259 260 261 |
# File 'lib/puma/configuration.rb', line 259 def rackup @options[:rackup] end |
#run_hooks(key, arg, events) ⇒ Object
291 292 293 294 295 296 297 298 299 300 |
# File 'lib/puma/configuration.rb', line 291 def run_hooks(key, arg, events) @options.all_of(key).each do |b| begin b.call arg rescue => e events.log "WARNING hook #{key} failed with exception (#{e.class}) #{e.}" events.debug e.backtrace.join("\n") end end end |