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 they time they make it to the
configuration 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.
- #configure ⇒ Object
-
#environment ⇒ Object
Return which environment we’re running in.
- #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) ⇒ Object
Constructor Details
#initialize(user_options = {}, default_options = {}, &block) ⇒ Configuration
Returns a new instance of Configuration.
129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/puma/configuration.rb', line 129 def initialize(={}, = {}, &block) = self..merge() = UserFileDefaultOptions.new(, ) @plugins = PluginLoader.new @user_dsl = DSL.new(., self) @file_dsl = DSL.new(., self) @default_dsl = DSL.new(., self) if block configure(&block) end end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
143 144 145 |
# File 'lib/puma/configuration.rb', line 143 def end |
#plugins ⇒ Object (readonly)
Returns the value of attribute plugins.
143 144 145 |
# File 'lib/puma/configuration.rb', line 143 def plugins @plugins end |
Class Method Details
.temp_path ⇒ Object
275 276 277 278 279 280 |
# File 'lib/puma/configuration.rb', line 275 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.
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/puma/configuration.rb', line 242 def app found = [:app] || load_rackup if [:mode] == :tcp require 'puma/tcp_logger' logger = [:logger] quiet = ![:log_requests] return TCPLogger.new(logger, found, quiet) end if [:log_requests] require 'puma/commonlogger' logger = [:logger] found = CommonLogger.new(found, logger) end ConfigMiddleware.new(self, found) end |
#app_configured? ⇒ Boolean
Indicate if there is a properly configured app
231 232 233 |
# File 'lib/puma/configuration.rb', line 231 def app_configured? [:app] || File.exist?(rackup) end |
#clamp ⇒ Object
Call once all configuration (included from rackup files) is loaded to flesh out any defaults
212 213 214 |
# File 'lib/puma/configuration.rb', line 212 def clamp .finalize_values end |
#configure ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/puma/configuration.rb', line 145 def configure yield @user_dsl, @file_dsl, @default_dsl ensure @user_dsl._offer_plugins @file_dsl._offer_plugins @default_dsl._offer_plugins end |
#environment ⇒ Object
Return which environment we’re running in
263 264 265 |
# File 'lib/puma/configuration.rb', line 263 def environment [:environment] end |
#flatten ⇒ Object
159 160 161 |
# File 'lib/puma/configuration.rb', line 159 def flatten dup.flatten! end |
#flatten! ⇒ Object
163 164 165 166 |
# File 'lib/puma/configuration.rb', line 163 def flatten! = .flatten self end |
#initialize_copy(other) ⇒ Object
153 154 155 156 157 |
# File 'lib/puma/configuration.rb', line 153 def initialize_copy(other) @conf = nil = nil = .dup end |
#load ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/puma/configuration.rb', line 191 def load files = .all_of(:config_files) if files.empty? imp = %W(config/puma/#{@options[:environment]}.rb config/puma.rb).find { |f| File.exist?(f) } files << imp elsif files == ["-"] files = [] end files.each do |f| @file_dsl._load_from(f) end end |
#load_plugin(name) ⇒ Object
267 268 269 |
# File 'lib/puma/configuration.rb', line 267 def load_plugin(name) @plugins.create name end |
#puma_default_options ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/puma/configuration.rb', line 168 def { :min_threads => 0, :max_threads => 16, :log_requests => false, :debug => false, :binds => ["tcp://#{DefaultTCPHost}:#{DefaultTCPPort}"], :workers => 0, :daemon => 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'] || "development" }, :rackup => DefaultRackup, :logger => STDOUT, :persistent_timeout => Const::PERSISTENT_TIMEOUT, :first_data_timeout => Const::FIRST_DATA_TIMEOUT } end |
#rackup ⇒ Object
235 236 237 |
# File 'lib/puma/configuration.rb', line 235 def rackup [:rackup] end |
#run_hooks(key, arg) ⇒ Object
271 272 273 |
# File 'lib/puma/configuration.rb', line 271 def run_hooks(key, arg) .all_of(key).each { |b| b.call arg } end |