puma_worker_killer 0.3.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/check_changelog.yml +3 -1
- data/.github/workflows/ci.yml +30 -0
- data/.standard.yml +1 -0
- data/CHANGELOG.md +10 -1
- data/Gemfile +3 -2
- data/README.md +4 -4
- data/Rakefile +7 -7
- data/lib/puma_worker_killer/auto_reap.rb +1 -1
- data/lib/puma_worker_killer/puma_memory.rb +4 -4
- data/lib/puma_worker_killer/version.rb +1 -1
- data/lib/puma_worker_killer.rb +11 -11
- data/puma_worker_killer.gemspec +22 -20
- data/test/fixtures/big.ru +1 -1
- data/test/fixtures/config/puma_worker_killer_start.rb +2 -2
- data/test/fixtures/default.ru +1 -1
- data/test/fixtures/fixture_helper.rb +8 -8
- data/test/fixtures/on_calculation.ru +1 -1
- data/test/fixtures/pre_term.ru +1 -1
- data/test/fixtures/rolling_pre_term.ru +1 -1
- data/test/fixtures/rolling_restart.ru +1 -1
- data/test/puma_worker_killer_test.rb +41 -41
- data/test/test_helper.rb +4 -4
- metadata +49 -36
- data/.travis.yml +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cc84b48c93491e0384e8e3da30ec2c088dc432bdc12c95674774dbf98b4ed31
|
4
|
+
data.tar.gz: 3cff15a9511c75c29a37d5337af0a7dffd1b3a994d4b82cc64ccdee7d492542d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba1c2b5ee20e0d5f9c9e4b632b87d21cc2b484fe7efc2579ebe9220c6f231588f66361a2394495aa6898151e186ccb84ae740fe6835c108c6c35daed29e52acf
|
7
|
+
data.tar.gz: f9ba9f2249702222cef094be88022dc45382cc5361e18ebdf723ed361520b181c5669b879aef8fb2aaf1993d325a696d7c25d265f9e483d49bde14dcb9f29dfe
|
@@ -6,7 +6,9 @@ jobs:
|
|
6
6
|
build:
|
7
7
|
runs-on: ubuntu-latest
|
8
8
|
steps:
|
9
|
-
- uses: actions/checkout@
|
9
|
+
- uses: actions/checkout@v4
|
10
|
+
with:
|
11
|
+
fetch-depth: 0
|
10
12
|
- name: Check that CHANGELOG is touched
|
11
13
|
run: |
|
12
14
|
cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
test:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
strategy:
|
11
|
+
fail-fast: false
|
12
|
+
matrix:
|
13
|
+
ruby:
|
14
|
+
- 3.1
|
15
|
+
- 3.2
|
16
|
+
- 3.3
|
17
|
+
- head
|
18
|
+
steps:
|
19
|
+
- name: Checkout code
|
20
|
+
uses: actions/checkout@v4
|
21
|
+
- name: Set up Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: ${{ matrix.ruby }}
|
25
|
+
bundler-cache: true
|
26
|
+
- name: Ruby linting
|
27
|
+
run: bundle exec standardrb
|
28
|
+
- name: test
|
29
|
+
run: bundle exec rake test
|
30
|
+
continue-on-error: ${{ matrix.ruby == 'head' }}
|
data/.standard.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby_version: 3.1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
## Main
|
2
2
|
|
3
|
+
## 1.0.0
|
4
|
+
|
5
|
+
- Add `bigdecimal` as a dependency (https://github.com/zombocom/puma_worker_killer/pull/109)
|
6
|
+
- Ruby versions prior to 3.1 may no longer work (https://github.com/zombocom/puma_worker_killer/pull/109)
|
7
|
+
|
8
|
+
## 0.3.1
|
9
|
+
|
10
|
+
- Relax puma dependency (#94)
|
11
|
+
|
3
12
|
## 0.3.0
|
4
13
|
|
5
14
|
- Test on recent ruby versions #84
|
@@ -26,7 +35,7 @@
|
|
26
35
|
|
27
36
|
## 0.0.6
|
28
37
|
|
29
|
-
- Log PID of worker
|
38
|
+
- Log PID of worker instead of inspecting the worker #33
|
30
39
|
|
31
40
|
## 0.0.5
|
32
41
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Puma Worker Killer
|
2
2
|
|
3
|
-
[](https://github.com/schneems/puma_worker_killer/actions/workflows/ci.yml)
|
4
|
+
[](https://www.codetriage.com/zombocom/puma_worker_killer)
|
5
5
|
|
6
6
|
## !!!!!!!!!!!!!!!! STOP !!!!!!!!!!!!!!!!
|
7
7
|
|
@@ -9,7 +9,7 @@ Before you use this gem, know that it is dangerous. If you have a memory issue,
|
|
9
9
|
|
10
10
|
This gem can also make your performance WORSE. When a worker is killed, and comes back it takes CPU cycles and time. If you are frequently restarting your workers then you're killing your performance.
|
11
11
|
|
12
|
-
Here are some places to start improving your understanding of memory
|
12
|
+
Here are some places to start improving your understanding of memory behavior in Ruby:
|
13
13
|
|
14
14
|
- [Complete Guide to Rails Performance (Book)](https://www.railsspeed.com)
|
15
15
|
- [How Ruby uses Memory](https://www.sitepoint.com/ruby-uses-memory/)
|
@@ -41,7 +41,7 @@ Then run `$ bundle install`
|
|
41
41
|
|
42
42
|
## Turn on Rolling Restarts - Heroku Mode
|
43
43
|
|
44
|
-
A rolling restart will kill each of your workers on a rolling basis. You set the frequency which it conducts the restart. This is a simple way to keep memory down as Ruby web programs generally increase memory usage over time. If you're using Heroku [it is difficult to measure RAM from inside of a container accurately](https://github.com/schneems/get_process_mem/issues/7), so it is recommended to use this feature or use a [log-drain-based worker killer](https://github.com/arches/whacamole). You can enable
|
44
|
+
A rolling restart will kill each of your workers on a rolling basis. You set the frequency which it conducts the restart. This is a simple way to keep memory down as Ruby web programs generally increase memory usage over time. If you're using Heroku [it is difficult to measure RAM from inside of a container accurately](https://github.com/schneems/get_process_mem/issues/7), so it is recommended to use this feature or use a [log-drain-based worker killer](https://github.com/arches/whacamole). You can enable rolling restarts by running:
|
45
45
|
|
46
46
|
```ruby
|
47
47
|
# config/puma.rb
|
data/Rakefile
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "bundler/gem_tasks"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require "rake"
|
6
|
+
require "rake/testtask"
|
7
7
|
|
8
|
-
task :
|
8
|
+
task default: [:test]
|
9
9
|
|
10
10
|
Rake::TestTask.new(:test) do |t|
|
11
|
-
t.libs <<
|
12
|
-
t.libs <<
|
13
|
-
t.pattern =
|
11
|
+
t.libs << "lib"
|
12
|
+
t.libs << "test"
|
13
|
+
t.pattern = "test/**/*_test.rb"
|
14
14
|
t.verbose = false
|
15
15
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module PumaWorkerKiller
|
4
4
|
class PumaMemory
|
5
5
|
def initialize(master = nil)
|
6
|
-
@master
|
6
|
+
@master = master || get_master
|
7
7
|
@workers = nil
|
8
8
|
end
|
9
9
|
|
@@ -55,7 +55,7 @@ module PumaWorkerKiller
|
|
55
55
|
worker_memory = workers.values.inject(:+) || 0
|
56
56
|
worker_memory + master_memory
|
57
57
|
end
|
58
|
-
|
58
|
+
alias_method :get_total_memory, :get_total
|
59
59
|
|
60
60
|
def workers
|
61
61
|
@workers || set_workers
|
@@ -71,11 +71,11 @@ module PumaWorkerKiller
|
|
71
71
|
# sorted by memory ascending (smallest first, largest last)
|
72
72
|
def set_workers
|
73
73
|
workers = {}
|
74
|
-
@master.instance_variable_get(
|
74
|
+
@master.instance_variable_get(:@workers).each do |worker|
|
75
75
|
workers[worker] = GetProcessMem.new(worker.pid).mb
|
76
76
|
end
|
77
77
|
if workers.any?
|
78
|
-
@workers =
|
78
|
+
@workers = workers.sort_by { |_, mem| mem }.to_h
|
79
79
|
else
|
80
80
|
{}
|
81
81
|
end
|
data/lib/puma_worker_killer.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "get_process_mem"
|
4
4
|
|
5
5
|
module PumaWorkerKiller
|
6
6
|
extend self
|
7
7
|
|
8
8
|
attr_accessor :ram, :frequency, :percent_usage, :rolling_restart_frequency,
|
9
|
-
|
10
|
-
|
9
|
+
:rolling_restart_splay_seconds,
|
10
|
+
:reaper_status_logs, :pre_term, :rolling_pre_term, :on_calculation
|
11
11
|
|
12
|
-
self.ram
|
13
|
-
self.frequency
|
12
|
+
self.ram = 512 # mb
|
13
|
+
self.frequency = 10 # seconds
|
14
14
|
self.percent_usage = 0.99 # percent of RAM to use
|
15
15
|
self.rolling_restart_frequency = 6 * 3600 # 6 hours in seconds
|
16
16
|
self.rolling_restart_splay_seconds = 0.0..300.0 # 0 to 5 minutes in seconds
|
@@ -33,15 +33,15 @@ module PumaWorkerKiller
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def enable_rolling_restart(frequency = rolling_restart_frequency,
|
36
|
-
|
36
|
+
splay_seconds = rolling_restart_splay_seconds)
|
37
37
|
# Randomize so all workers don't restart at the exact same time across multiple machines.
|
38
38
|
frequency += rand(splay_seconds)
|
39
39
|
AutoReap.new(frequency, RollingRestart.new(nil, rolling_pre_term)).start
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
require
|
44
|
-
require
|
45
|
-
require
|
46
|
-
require
|
47
|
-
require
|
43
|
+
require "puma_worker_killer/puma_memory"
|
44
|
+
require "puma_worker_killer/reaper"
|
45
|
+
require "puma_worker_killer/rolling_restart"
|
46
|
+
require "puma_worker_killer/auto_reap"
|
47
|
+
require "puma_worker_killer/version"
|
data/puma_worker_killer.gemspec
CHANGED
@@ -1,28 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require "puma_worker_killer/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |gem|
|
8
|
-
gem.name
|
9
|
-
gem.version
|
10
|
-
gem.authors
|
11
|
-
gem.email
|
12
|
-
gem.description
|
13
|
-
gem.summary
|
14
|
-
gem.homepage
|
15
|
-
gem.license
|
8
|
+
gem.name = "puma_worker_killer"
|
9
|
+
gem.version = PumaWorkerKiller::VERSION
|
10
|
+
gem.authors = ["Richard Schneeman"]
|
11
|
+
gem.email = ["richard.schneeman+rubygems@gmail.com"]
|
12
|
+
gem.description = " Kills pumas, the code kind "
|
13
|
+
gem.summary = " If you have a memory leak in your web code puma_worker_killer can keep it in check. "
|
14
|
+
gem.homepage = "https://github.com/schneems/puma_worker_killer"
|
15
|
+
gem.license = "MIT"
|
16
16
|
|
17
|
-
gem.files
|
18
|
-
gem.executables
|
19
|
-
gem.
|
20
|
-
gem.require_paths = ['lib']
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
19
|
+
gem.require_paths = ["lib"]
|
21
20
|
|
22
|
-
gem.add_dependency
|
23
|
-
gem.add_dependency
|
24
|
-
gem.
|
25
|
-
|
26
|
-
gem.add_development_dependency
|
27
|
-
gem.add_development_dependency
|
21
|
+
gem.add_dependency "puma", ">= 2.7"
|
22
|
+
gem.add_dependency "bigdecimal", ">= 2.0"
|
23
|
+
gem.add_dependency "get_process_mem", ">= 0.2"
|
24
|
+
|
25
|
+
gem.add_development_dependency "rack", ">= 3.0"
|
26
|
+
gem.add_development_dependency "rake", ">= 13.0"
|
27
|
+
gem.add_development_dependency "rackup", ">= 2.1"
|
28
|
+
gem.add_development_dependency "test-unit", ">= 0"
|
29
|
+
gem.add_development_dependency "wait_for_it", ">= 0.1"
|
28
30
|
end
|
data/test/fixtures/big.ru
CHANGED
data/test/fixtures/default.ru
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "securerandom"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require "rack"
|
6
|
+
require "rackup/server"
|
7
7
|
|
8
|
-
require
|
8
|
+
require "puma_worker_killer"
|
9
9
|
|
10
10
|
PumaWorkerKiller.config do |config|
|
11
|
-
config.ram
|
12
|
-
config.frequency = Integer(ENV[
|
11
|
+
config.ram = Integer(ENV["PUMA_RAM"]) if ENV["PUMA_RAM"]
|
12
|
+
config.frequency = Integer(ENV["PUMA_FREQUENCY"]) if ENV["PUMA_FREQUENCY"]
|
13
13
|
end
|
14
14
|
|
15
|
-
puts "Frequency: #{PumaWorkerKiller.frequency}" if ENV[
|
15
|
+
puts "Frequency: #{PumaWorkerKiller.frequency}" if ENV["PUMA_FREQUENCY"]
|
16
16
|
|
17
17
|
class HelloWorld
|
18
18
|
def response(_env)
|
19
|
-
[200, {}, [
|
19
|
+
[200, {}, ["Hello World"]]
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
data/test/fixtures/pre_term.ru
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
load File.expand_path(
|
3
|
+
load File.expand_path("fixture_helper.rb", __dir__)
|
4
4
|
|
5
5
|
PumaWorkerKiller.config do |config|
|
6
6
|
config.rolling_pre_term = ->(worker) { puts("About to terminate (rolling) worker: #{worker.pid}") }
|
@@ -1,60 +1,60 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "test_helper"
|
4
4
|
|
5
5
|
class PumaWorkerKillerTest < Test::Unit::TestCase
|
6
6
|
def test_starts
|
7
|
-
port
|
8
|
-
command
|
9
|
-
options
|
7
|
+
port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
|
8
|
+
command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --preload --debug -p #{port}"
|
9
|
+
options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1}}
|
10
10
|
|
11
11
|
WaitForIt.new(command, options) do |spawn|
|
12
|
-
assert_contains(spawn,
|
12
|
+
assert_contains(spawn, "PumaWorkerKiller")
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_without_preload
|
17
|
-
port
|
18
|
-
command
|
19
|
-
options
|
17
|
+
port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
|
18
|
+
command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --debug -p #{port} -C #{fixture_path.join("config/puma_worker_killer_start.rb")}"
|
19
|
+
options = {wait_for: "booted", timeout: 10, env: {"PUMA_FREQUENCY" => 1}}
|
20
20
|
|
21
21
|
WaitForIt.new(command, options) do |spawn|
|
22
|
-
assert_contains(spawn,
|
22
|
+
assert_contains(spawn, "PumaWorkerKiller")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_kills_large_app
|
27
|
-
file
|
28
|
-
port
|
29
|
-
command
|
30
|
-
options
|
27
|
+
file = fixture_path.join("big.ru")
|
28
|
+
port = 0
|
29
|
+
command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
|
30
|
+
options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
|
31
31
|
|
32
32
|
WaitForIt.new(command, options) do |spawn|
|
33
|
-
assert_contains(spawn,
|
33
|
+
assert_contains(spawn, "Out of memory")
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_pre_term
|
38
|
-
file
|
39
|
-
port
|
40
|
-
command
|
41
|
-
options
|
38
|
+
file = fixture_path.join("pre_term.ru")
|
39
|
+
port = 0
|
40
|
+
command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
|
41
|
+
options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
|
42
42
|
|
43
43
|
WaitForIt.new(command, options) do |spawn|
|
44
|
-
assert_contains(spawn,
|
45
|
-
assert_contains(spawn,
|
44
|
+
assert_contains(spawn, "Out of memory")
|
45
|
+
assert_contains(spawn, "About to terminate worker:") # defined in pre_term.ru
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_on_calculation
|
50
|
-
file
|
51
|
-
port
|
52
|
-
command
|
53
|
-
options
|
50
|
+
file = fixture_path.join("on_calculation.ru")
|
51
|
+
port = 0
|
52
|
+
command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
|
53
|
+
options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
|
54
54
|
|
55
55
|
WaitForIt.new(command, options) do |spawn|
|
56
|
-
assert_contains(spawn,
|
57
|
-
assert_contains(spawn,
|
56
|
+
assert_contains(spawn, "Out of memory")
|
57
|
+
assert_contains(spawn, "Current memory footprint:") # defined in on_calculate.ru
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -63,23 +63,23 @@ class PumaWorkerKillerTest < Test::Unit::TestCase
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_rolling_restart
|
66
|
-
file
|
67
|
-
port
|
68
|
-
command
|
66
|
+
file = fixture_path.join("rolling_restart.ru")
|
67
|
+
port = 0
|
68
|
+
command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
|
69
69
|
puts command.inspect
|
70
|
-
options = {
|
70
|
+
options = {wait_for: "booted", timeout: 15, env: {}}
|
71
71
|
|
72
72
|
WaitForIt.new(command, options) do |spawn|
|
73
|
-
assert_contains(spawn,
|
73
|
+
assert_contains(spawn, "Rolling Restart")
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_rolling_restart_worker_kill_check
|
78
|
-
file
|
79
|
-
port
|
80
|
-
command
|
78
|
+
file = fixture_path.join("rolling_restart.ru")
|
79
|
+
port = 0
|
80
|
+
command = "bundle exec puma #{file} -t 1:1 -w 1 --preload --debug -p #{port}"
|
81
81
|
puts command.inspect
|
82
|
-
options = {
|
82
|
+
options = {wait_for: "booted", timeout: 120, env: {}}
|
83
83
|
|
84
84
|
WaitForIt.new(command, options) do |spawn|
|
85
85
|
# at least 2 matches for TERM (so we set a timeout value longer - 120sec)
|
@@ -90,15 +90,15 @@ class PumaWorkerKillerTest < Test::Unit::TestCase
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def test_rolling_pre_term
|
93
|
-
file
|
94
|
-
port
|
95
|
-
command
|
93
|
+
file = fixture_path.join("rolling_pre_term.ru")
|
94
|
+
port = 0
|
95
|
+
command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
|
96
96
|
puts command.inspect
|
97
|
-
options = {
|
97
|
+
options = {wait_for: "booted", timeout: 15, env: {}}
|
98
98
|
|
99
99
|
WaitForIt.new(command, options) do |spawn|
|
100
|
-
assert_contains(spawn,
|
101
|
-
assert_contains(spawn,
|
100
|
+
assert_contains(spawn, "Rolling Restart")
|
101
|
+
assert_contains(spawn, "About to terminate (rolling) worker:") # defined in rolling_pre_term.ru
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
data/test/test_helper.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
Bundler.require
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
5
|
+
require "puma_worker_killer"
|
6
|
+
require "test/unit"
|
7
|
+
require "wait_for_it"
|
8
8
|
|
9
9
|
def fixture_path
|
10
|
-
Pathname.new(File.expand_path(
|
10
|
+
Pathname.new(File.expand_path("fixtures", __dir__))
|
11
11
|
end
|
metadata
CHANGED
@@ -1,77 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puma_worker_killer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Schneeman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: puma
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bigdecimal
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '2.
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '5'
|
33
|
+
version: '2.0'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '2.
|
44
|
-
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: get_process_mem
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
45
53
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
54
|
+
version: '0.2'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: rack
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
50
58
|
requirements:
|
51
|
-
- - "
|
59
|
+
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '3.0'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
requirements:
|
58
|
-
- - "
|
66
|
+
- - ">="
|
59
67
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
68
|
+
version: '3.0'
|
61
69
|
- !ruby/object:Gem::Dependency
|
62
70
|
name: rake
|
63
71
|
requirement: !ruby/object:Gem::Requirement
|
64
72
|
requirements:
|
65
|
-
- - "
|
73
|
+
- - ">="
|
66
74
|
- !ruby/object:Gem::Version
|
67
75
|
version: '13.0'
|
68
76
|
type: :development
|
69
77
|
prerelease: false
|
70
78
|
version_requirements: !ruby/object:Gem::Requirement
|
71
79
|
requirements:
|
72
|
-
- - "
|
80
|
+
- - ">="
|
73
81
|
- !ruby/object:Gem::Version
|
74
82
|
version: '13.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rackup
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.1'
|
75
97
|
- !ruby/object:Gem::Dependency
|
76
98
|
name: test-unit
|
77
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,14 +112,14 @@ dependencies:
|
|
90
112
|
name: wait_for_it
|
91
113
|
requirement: !ruby/object:Gem::Requirement
|
92
114
|
requirements:
|
93
|
-
- - "
|
115
|
+
- - ">="
|
94
116
|
- !ruby/object:Gem::Version
|
95
117
|
version: '0.1'
|
96
118
|
type: :development
|
97
119
|
prerelease: false
|
98
120
|
version_requirements: !ruby/object:Gem::Requirement
|
99
121
|
requirements:
|
100
|
-
- - "
|
122
|
+
- - ">="
|
101
123
|
- !ruby/object:Gem::Version
|
102
124
|
version: '0.1'
|
103
125
|
description: " Kills pumas, the code kind "
|
@@ -108,10 +130,11 @@ extensions: []
|
|
108
130
|
extra_rdoc_files: []
|
109
131
|
files:
|
110
132
|
- ".github/workflows/check_changelog.yml"
|
133
|
+
- ".github/workflows/ci.yml"
|
111
134
|
- ".gitignore"
|
112
135
|
- ".rubocop.yml"
|
113
136
|
- ".rubocop_todo.yml"
|
114
|
-
- ".
|
137
|
+
- ".standard.yml"
|
115
138
|
- CHANGELOG.md
|
116
139
|
- Gemfile
|
117
140
|
- README.md
|
@@ -152,19 +175,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
175
|
- !ruby/object:Gem::Version
|
153
176
|
version: '0'
|
154
177
|
requirements: []
|
155
|
-
rubygems_version: 3.
|
178
|
+
rubygems_version: 3.5.9
|
156
179
|
signing_key:
|
157
180
|
specification_version: 4
|
158
181
|
summary: If you have a memory leak in your web code puma_worker_killer can keep it
|
159
182
|
in check.
|
160
|
-
test_files:
|
161
|
-
- test/fixtures/big.ru
|
162
|
-
- test/fixtures/config/puma_worker_killer_start.rb
|
163
|
-
- test/fixtures/default.ru
|
164
|
-
- test/fixtures/fixture_helper.rb
|
165
|
-
- test/fixtures/on_calculation.ru
|
166
|
-
- test/fixtures/pre_term.ru
|
167
|
-
- test/fixtures/rolling_pre_term.ru
|
168
|
-
- test/fixtures/rolling_restart.ru
|
169
|
-
- test/puma_worker_killer_test.rb
|
170
|
-
- test/test_helper.rb
|
183
|
+
test_files: []
|
data/.travis.yml
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.3.8
|
4
|
-
- 2.4.10
|
5
|
-
- 2.5.8
|
6
|
-
- 2.6.6
|
7
|
-
- 2.7.1
|
8
|
-
- ruby-head
|
9
|
-
- rbx
|
10
|
-
before_install:
|
11
|
-
- gem install bundler -v 1.12.5
|
12
|
-
|
13
|
-
matrix:
|
14
|
-
allow_failures:
|
15
|
-
- rvm: ruby-head
|
16
|
-
- rvm: rbx
|
17
|
-
|
18
|
-
install:
|
19
|
-
- bundle install
|
20
|
-
|
21
|
-
script:
|
22
|
-
- bundle exec rubocop
|
23
|
-
- bundle exec rake test
|