config.ru 1.22 KB
Newer Older
gitlabhq's avatar
gitlabhq committed
1 2
# This file is used by Rack-based servers to start the application.

3
if defined?(Unicorn)
4
  require 'unicorn'
5

6 7 8 9
  if ENV['RAILS_ENV'] == 'production' || ENV['RAILS_ENV'] == 'staging'
    # Unicorn self-process killer
    require 'unicorn/worker_killer'

10 11
    min = (ENV['GITLAB_UNICORN_MEMORY_MIN'] || 400 * 1 << 20).to_i
    max = (ENV['GITLAB_UNICORN_MEMORY_MAX'] || 650 * 1 << 20).to_i
12

13
    # Max memory size (RSS) per worker
14
    use Unicorn::WorkerKiller::Oom, min, max
15
  end
16
end
17

18
require ::File.expand_path('../config/environment', __FILE__)
19

20 21 22 23
def master_process?
  Prometheus::PidProvider.worker_id.in? %w(unicorn_master puma_master)
end

24
warmup do |app|
25 26 27 28 29
  # The following is necessary to ensure stale Prometheus metrics don't accumulate over time.
  # It needs to be done as early as here to ensure metrics files aren't deleted.
  # After we hit our app in `warmup`, first metrics and corresponding files already being created,
  # for example in `lib/gitlab/metrics/requests_rack_middleware.rb`.
  Prometheus::CleanupMultiprocDirService.new.execute if master_process?
30

31 32 33 34
  client = Rack::MockRequest.new(app)
  client.get('/')
end

35
map ENV['RAILS_RELATIVE_URL_ROOT'] || "/" do
Lin Jen-Shin's avatar
Lin Jen-Shin committed
36
  use Gitlab::Middleware::ReleaseEnv
37 38
  run Gitlab::Application
end