Class: Puma::Configuration::DSL

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/configuration.rb

Overview

The methods that are available for use inside the config file.

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ DSL

Returns a new instance of DSL.



159
160
161
# File 'lib/puma/configuration.rb', line 159

def initialize(options)
  @options = options
end

Instance Method Details

#_load_from(path) ⇒ Object



163
164
165
# File 'lib/puma/configuration.rb', line 163

def _load_from(path)
  instance_eval File.read(path), path, 1
end

#activate_control_app(url = "auto", opts = nil) ⇒ Object

Start the Puma control rack app on url. This app can be communicated with to control the main server.



181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/puma/configuration.rb', line 181

def activate_control_app(url="auto", opts=nil)
  @options[:control_url] = url

  if opts
    if tok = opts[:auth_token]
      @options[:control_auth_token] = tok
    end

    if opts[:no_token]
      @options[:control_auth_token] = :none
    end
  end
end

#after_worker_boot(&block) ⇒ Object

*Cluster mode only* Code to run when a worker boots to setup the process after booting the app.

This can be called multiple times to add hooks.



318
319
320
# File 'lib/puma/configuration.rb', line 318

def after_worker_boot(&block)
  @options[:after_worker_boot] << block
end

#app(obj = nil, &block) ⇒ Object

Use obj or block as the Rack app. This allows a config file to be the app itself.



170
171
172
173
174
175
176
# File 'lib/puma/configuration.rb', line 170

def app(obj=nil, &block)
  obj ||= block

  raise "Provide either a #call'able or a block" unless obj

  @options[:app] = obj
end

#bind(url) ⇒ Object

Bind the server to url. tcp:// and unix:// are the only accepted protocols.



198
199
200
# File 'lib/puma/configuration.rb', line 198

def bind(url)
  @options[:binds] << url
end

#daemonize(which = true) ⇒ Object

Daemonize the server into the background. Highly suggest that this be combined with pidfile and stdout_redirect.



210
211
212
# File 'lib/puma/configuration.rb', line 210

def daemonize(which=true)
  @options[:daemon] = which
end

#directory(dir) ⇒ Object

The directory to operate out of.



323
324
325
326
# File 'lib/puma/configuration.rb', line 323

def directory(dir)
  @options[:directory] = dir.to_s
  @options[:worker_directory] = dir.to_s
end

#drain_on_shutdown(which = true) ⇒ Object

When shutting down, drain the accept socket of pending connections and proces them. This loops over the accept socket until there are no more read events and then stops looking and waits for the requests to finish.



218
219
220
# File 'lib/puma/configuration.rb', line 218

def drain_on_shutdown(which=true)
  @options[:drain_on_shutdown] = which
end

#environment(environment) ⇒ Object

Set the environment in which the Rack’s app will run.



223
224
225
# File 'lib/puma/configuration.rb', line 223

def environment(environment)
  @options[:environment] = environment
end

#lowlevel_error_handler(obj = nil, &block) ⇒ Object

Use obj or block as the low lever error handler. This allows a config file to change the default error on the server.



344
345
346
347
348
# File 'lib/puma/configuration.rb', line 344

def lowlevel_error_handler(obj=nil, &block)
  obj ||= block
  raise "Provide either a #call'able or a block" unless obj
  @options[:lowlevel_error_handler] = obj
end

#on_restart(&block) ⇒ Object

Code to run before doing a restart. This code should close logfiles, database connections, etc.

This can be called multiple times to add code each time.



232
233
234
# File 'lib/puma/configuration.rb', line 232

def on_restart(&block)
  @options[:on_restart] << block
end

#on_worker_boot(&block) ⇒ Object

*Cluster mode only* Code to run when a worker boots to setup the process before booting the app.

This can be called multiple times to add hooks.



309
310
311
# File 'lib/puma/configuration.rb', line 309

def on_worker_boot(&block)
  @options[:before_worker_boot] << block
end

#pidfile(path) ⇒ Object

Store the pid of the server in the file at path.



245
246
247
# File 'lib/puma/configuration.rb', line 245

def pidfile(path)
  @options[:pidfile] = path
end

#port(port) ⇒ Object

Define the TCP port to bind to. Use bind for more advanced options.



204
205
206
# File 'lib/puma/configuration.rb', line 204

def port(port)
  @options[:binds] << "tcp://#{Configuration::DefaultTCPHost}:#{port}"
end

#preload_app!(answer = true) ⇒ Object

*Cluster mode only* Preload the application before starting the workers and setting up the listen ports. This conflicts with using the phased restart feature, you can’t use both.



337
338
339
# File 'lib/puma/configuration.rb', line 337

def preload_app!(answer=true)
  @options[:preload_app] = answer
end

#prune_bundler(answer = true) ⇒ Object

This option is used to allow your app and it’s gems to be properly reloaded when not using preload.

When set, if puma detects that it’s been invoked in the context of Bundler, it will cleanup the environment and re-run itself outside the Bundler environment, but directly using the files that Bundler has setup.

This means that puma is now decoupled from your Bundler context and when each worker loads, it will be loading a new Bundler context and thus can float around as the release dictates.



362
363
364
# File 'lib/puma/configuration.rb', line 362

def prune_bundler(answer=true)
  @options[:prune_bundler] = answer
end

#quietObject

Disable request logging.



251
252
253
# File 'lib/puma/configuration.rb', line 251

def quiet
  @options[:quiet] = true
end

#rackup(path) ⇒ Object

Load path as a rackup file.



257
258
259
# File 'lib/puma/configuration.rb', line 257

def rackup(path)
  @options[:rackup] = path.to_s
end

#restart_command(cmd) ⇒ Object

Command to use to restart puma. This should be just how to load puma itself (ie. ‘ruby -Ilib bin/puma’), not the arguments to puma, as those are the same as the original process.



240
241
242
# File 'lib/puma/configuration.rb', line 240

def restart_command(cmd)
  @options[:restart_cmd] = cmd
end

#ssl_bind(host, port, opts) ⇒ Object



282
283
284
285
286
287
288
289
# File 'lib/puma/configuration.rb', line 282

def ssl_bind(host, port, opts)
  o = [
    "cert=#{opts[:cert]}",
    "key=#{opts[:key]}"
  ]

  @options[:binds] << "ssl://#{host}:#{port}?#{o.join('&')}"
end

#state_path(path) ⇒ Object

Use path as the file to store the server info state. This is used by pumactl to query and control the server.



294
295
296
# File 'lib/puma/configuration.rb', line 294

def state_path(path)
  @options[:state] = path.to_s
end

#stdout_redirect(stdout = nil, stderr = nil, append = false) ⇒ Object

Redirect STDOUT and STDERR to files specified.



262
263
264
265
266
# File 'lib/puma/configuration.rb', line 262

def stdout_redirect(stdout=nil, stderr=nil, append=false)
  @options[:redirect_stdout] = stdout
  @options[:redirect_stderr] = stderr
  @options[:redirect_append] = append
end

#tag(string) ⇒ Object

Additional text to display in process listing



367
368
369
# File 'lib/puma/configuration.rb', line 367

def tag(string)
  @options[:tag] = string
end

#tcp_modeObject

Run the app as a raw TCP app instead of an HTTP rack app



329
330
331
# File 'lib/puma/configuration.rb', line 329

def tcp_mode
  @options[:mode] = :tcp
end

#threads(min, max) ⇒ Object

Configure min to be the minimum number of threads to use to answer requests and max the maximum.



271
272
273
274
275
276
277
278
279
280
# File 'lib/puma/configuration.rb', line 271

def threads(min, max)
  min = Integer(min)
  max = Integer(max)
  if min > max
    raise "The minimum (#{min}) number of threads must be less than the max (#{max})"
  end

  @options[:min_threads] = min
  @options[:max_threads] = max
end

#worker_timeout(timeout) ⇒ Object

*Cluster mode only* Set the timeout for workers



372
373
374
# File 'lib/puma/configuration.rb', line 372

def worker_timeout(timeout)
  @options[:worker_timeout] = timeout
end

#workers(count) ⇒ Object

*Cluster mode only* How many worker processes to run.



300
301
302
# File 'lib/puma/configuration.rb', line 300

def workers(count)
  @options[:workers] = count.to_i
end