Class: Puma::Configuration

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

Defined Under Namespace

Classes: ConfigMiddleware, DSL

Constant Summary collapse

DefaultRackup =
"config.ru"
DefaultTCPHost =
"0.0.0.0"
DefaultTCPPort =
9292

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Configuration

Returns a new instance of Configuration.



18
19
20
21
22
# File 'lib/puma/configuration.rb', line 18

def initialize(options)
  @options = options
  @options[:binds] ||= []
  @options[:on_restart] ||= []
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



24
25
26
# File 'lib/puma/configuration.rb', line 24

def options
  @options
end

Class Method Details

.temp_pathObject



137
138
139
140
141
142
# File 'lib/puma/configuration.rb', line 137

def self.temp_path
  require 'tmpdir'

  t = (Time.now.to_f * 1000).to_i
  "#{Dir.tmpdir}/puma-status-#{t}-#{$$}"
end

Instance Method Details

#appObject

Load the specified rackup file, pull an options from the rackup file, and set @app.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/puma/configuration.rb', line 83

def app
  app = @options[:app]

  unless app
    unless File.exists?(rackup)
      raise "Missing rackup file '#{rackup}'"
    end

    app, options = Rack::Builder.parse_file rackup
    @options.merge! options

    options.each do |key,val|
      if key.to_s[0,4] == "bind"
        @options[:binds] << val
      end
    end
  end

  if !@options[:quiet] and @options[:environment] == "development"
    logger = @options[:logger] || STDOUT
    app = Rack::CommonLogger.new(app, logger)
  end

  return ConfigMiddleware.new(self, app)
end

#app_configured?Boolean

Indicate if there is a properly configured app

Returns:

  • (Boolean)


72
73
74
# File 'lib/puma/configuration.rb', line 72

def app_configured?
  @options[:app] || File.exists?(rackup)
end

#initialize_copy(other) ⇒ Object



26
27
28
# File 'lib/puma/configuration.rb', line 26

def initialize_copy(other)
  @options = @options.dup
end

#loadObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/puma/configuration.rb', line 30

def load
  if path = @options[:config_file]
    DSL.new(@options)._load_from path
  end

  # Rakeup default option support
  if host = @options[:Host]
    port = @options[:Port] || DefaultTCPPort

    @options[:binds] << "tcp://#{host}:#{port}"
  end

  if @options[:binds].empty?
    @options[:binds] << "tcp://#{DefaultTCPHost}:#{DefaultTCPPort}"
  end

  if @options[:control_url] == "auto"
    path = Configuration.temp_path
    @options[:control_url] = "unix://#{path}"
    @options[:control_url_temp] = path
  end

  unless @options[:control_auth_token]
    setup_random_token
  end
end

#rackupObject



76
77
78
# File 'lib/puma/configuration.rb', line 76

def rackup
  @options[:rackup] || DefaultRackup
end

#setup_random_tokenObject



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/puma/configuration.rb', line 109

def setup_random_token
  begin
    require 'openssl'
  rescue LoadError
  end

  count = 16

  bytes = nil

  if defined? OpenSSL::Random
    bytes = OpenSSL::Random.random_bytes(count)
  elsif File.exists?("/dev/urandom")
    File.open("/dev/urandom") do |f|
      bytes = f.read(count)
    end
  end

  if bytes
    token = ""
    bytes.each_byte { |b| token << b.to_s(16) }
  else
    token = (0..count).to_a.map { rand(255).to_s(16) }.join
  end

  @options[:control_auth_token] = token
end