puma-daemon 0.1.2 → 0.2.3

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.
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ end
26
26
  task build: :permissions
27
27
 
28
28
  YARD::Rake::YardocTask.new(:doc) do |t|
29
- t.files = %w[lib/**/*.rb exe/*.rb - README.adoc CHANGELOG.md LICENSE.txt]
29
+ t.files = %w[lib/**/*.rb exe/* - README.adoc CHANGELOG.md LICENSE.txt]
30
30
  t.options.unshift('--title', '"Puma Daemon"')
31
31
  t.after = -> { exec('open doc/index.html') }
32
32
  end
data/bin/console CHANGED
@@ -7,7 +7,7 @@ require 'puma/daemon'
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.
9
9
 
10
- # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # (If you use this, don't forget to add pry to your Gemfile.puma-v5!)
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
data/codecov.yml ADDED
@@ -0,0 +1,4 @@
1
+ comment:
2
+ layout: "reach,diff,flags,tree,betaprofiling"
3
+ show_critical_paths: true
4
+
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+
3
+ export txtblk='\e[0;30m'
4
+ export txtred='\e[0;31m'
5
+ export txtgrn='\e[0;32m'
6
+ export txtylw='\e[0;33m'
7
+ export txtblu='\e[0;34m'
8
+ export txtpur='\e[0;35m'
9
+ export txtcyn='\e[0;36m'
10
+ export txtwht='\e[0;37m'
11
+ export clr='\e[0;0m'
12
+
13
+ [[ -f cluster.sh ]] || {
14
+ echo -e "${txtred}Please run this from the ./example folder.${clr}"
15
+ exit 1
16
+ }
17
+
18
+ [[ -f ../Gemfile ]] || {
19
+ echo -e "${txtred}Please choose either Puma v5 or Puma v6, by running:${clr}"
20
+ echo -e "${txtgrn}make puma-v5 or make puma-v6"
21
+ exit 2
22
+ }
23
+
24
+ echo -e "${txtblu}Ensuring your dependencies are installed...${clr}"
25
+
26
+ (
27
+ cd .. || exit 2;
28
+ bundle check || bundle install
29
+ ) >/dev/null
30
+
31
+ pid=$(ps -ef | grep puma | grep example | awk '{print $2}')
32
+
33
+ [[ -n $pid ]] && kill $pid && sleep 1
34
+
35
+ echo -e "${txtblu}Starting Puma in cluster mode.${clr}"
36
+
37
+ command="bundle exec puma -I ../lib -C $(pwd)/puma.rb -w 4"
38
+ echo -e "${txtblu}Running Command:"
39
+ echo -e "${txtgrn}${command}${clr}"
40
+ eval "${command}"
41
+
42
+ echo -e "${txtblu}Verifying Puma is running...${clr}"
43
+
44
+ sleep 0.5
45
+
46
+ output=$(mktemp)
47
+
48
+ set -e
49
+
50
+ curl http://0.0.0.0:9292/ > "${output}" 2>/dev/null
51
+
52
+ [[ $(cat ${output}) == "Hello World" ]] || {
53
+ echo -e "${txtred}Invalid response:${clr}">&2
54
+ cat ${output}
55
+ exit 3
56
+ }
57
+
58
+ echo -e "${txtgrn}Puma Daemon is running and returning the expected string.${clr}"
59
+
60
+ ps -ef | grep [p]uma
61
+
data/example/config.ru ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # config.ru
4
+ run(proc { |*| ['200', { 'Content-Type' => 'text/html' }, ['Hello World']] })
5
+ # run this with rackup command
data/example/puma.rb ADDED
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'puma/daemon'
4
+
5
+ # The directory to operate out of.
6
+ # The default is the current directory.
7
+
8
+ # The default is “development”.
9
+
10
+ environment 'development'
11
+
12
+ # Store the pid of the server in the file at “path”.
13
+
14
+ pidfile '/tmp/puma.pid'
15
+
16
+ # Use “path” as the file to store the server info state. This is
17
+ # used by “pumactl” to query and control the server.
18
+ state_path '/tmp/puma.state'
19
+
20
+ # Redirect STDOUT and STDERR to files specified. The 3rd parameter
21
+ # (“append”) specifies whether the output is appended, the default is
22
+ # “false”.
23
+ stdout_redirect '/tmp/puma_access.log', '/tmp/puma_error.log', true
24
+
25
+ quiet
26
+
27
+ threads 0, 16
28
+
29
+ # Bind the server to “url”. “tcp://”, “unix://” and “ssl://” are the only
30
+ # accepted protocols.
31
+ # The default is “tcp://0.0.0.0:9292”.
32
+
33
+ bind 'unix:///tmp/puma.sock'
34
+ bind 'tcp://0.0.0.0:9292'
35
+
36
+ # Instead of “bind 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'” you
37
+ # can also use the “ssl_bind” option.
38
+
39
+ # ssl_bind '127.0.0.1', '9292', { key: path_to_key, cert: path_to_cert }
40
+
41
+ # Code to run before doing a restart. This code should
42
+ # close log files, database connections, etc.
43
+
44
+ # This can be called multiple times to add code each time.
45
+
46
+ on_restart do
47
+ puts 'On restart...'
48
+ end
49
+
50
+ # Command to use to restart puma. This should be just how to
51
+ # load puma itself (ie. 'ruby -Ilib bin/puma'), not the arguments
52
+ # to puma, as those are the same as the original process.
53
+
54
+ # === Cluster mode ===
55
+
56
+ # How many worker processes to run.
57
+ # The default is “0”.
58
+
59
+ workers 2
60
+
61
+ # Code to run when a worker boots to setup the process before booting
62
+ # the app.
63
+ # This can be called multiple times to add hooks.
64
+
65
+ # === Puma control rack application ===
66
+
67
+ # Start the puma control rack application on “url”. This application can
68
+ # be communicated with to control the main server. Additionally, you can
69
+ # provide an authentication token, so all requests to the control server
70
+ # will need to include that token as a query parameter. This allows for
71
+ # simple authentication.
72
+
73
+ # Check out https://github.com/puma/puma/blob/master/lib/puma/app/status.rb
74
+ # to see what the app has available.
75
+
76
+ # activate_control_app 'unix:///var/run/pumactl.sock'
77
+
78
+ daemonize
data/example/single.sh ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env bash
2
+
3
+ export txtblk='\e[0;30m'
4
+ export txtred='\e[0;31m'
5
+ export txtgrn='\e[0;32m'
6
+ export txtylw='\e[0;33m'
7
+ export txtblu='\e[0;34m'
8
+ export txtpur='\e[0;35m'
9
+ export txtcyn='\e[0;36m'
10
+ export txtwht='\e[0;37m'
11
+ export clr='\e[0;0m'
12
+
13
+ [[ -f single.sh ]] || {
14
+ echo -e "${txtred}Please run this from the ./example folder.${clr}"
15
+ exit 1
16
+ }
17
+
18
+ [[ -f ../Gemfile ]] || {
19
+ echo -e "${txtred}Please choose either Puma v5 or Puma v6, by running:${clr}"
20
+ echo -e "${txtgrn}make puma-v5 or make puma-v6${clr}"
21
+ exit 2
22
+ }
23
+
24
+ echo -e "${txtblu}Ensuring your dependencies are installed...${clr}"
25
+
26
+ (
27
+ cd .. || exit 2;
28
+ bundle check || bundle install
29
+ ) >/dev/null
30
+
31
+ [[ -d example ]] && cd example
32
+
33
+ pid=$(ps -ef | grep puma | grep example | awk '{print $2}')
34
+
35
+ [[ -n $pid ]] && kill $pid && sleep 1
36
+
37
+ echo -e "${txtblu}Starting Puma in Single mode.${clr}"
38
+
39
+ command="../exe/pumad -C $(pwd)/puma.rb -w 0"
40
+ echo "Executing:"
41
+ echo -e "${txtgrn}${command}${clr}"
42
+ eval "${command}"
43
+
44
+ echo "Verifying Puma is running"
45
+
46
+ output=$(mktemp)
47
+
48
+ set -e
49
+
50
+ curl http://0.0.0.0:9292/ > "${output}" 2>/dev/null
51
+
52
+ [[ $(cat ${output}) == "Hello World" ]] || {
53
+ echo -e "${txtred}Invalid response:${clr}">&2
54
+ cat ${output}
55
+ exit 3
56
+ }
57
+
58
+ echo -e "${txtgrn}Puma Daemon is running and returning the expected string.${clr}"
59
+
60
+ ps -ef | grep [p]uma
61
+
62
+ echo
63
+
64
+
data/exe/pumad CHANGED
@@ -1,6 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
+ # vim: ft=ruby
5
+
6
+ lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib")
7
+ $LOAD_PATH << lib_path if File.exist?(lib_path) && !$LOAD_PATH.include?(lib_path)
8
+
4
9
  require 'puma/daemon'
5
10
 
6
11
  # If we are passing -d or --daemonize, do so
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../daemon'
4
+
3
5
  module Puma
4
6
  module Daemon
5
7
  class CLI
6
8
  attr_accessor :argv, :cli
7
9
 
8
- def initialize(argv = ARGV, events = Events.stdio)
10
+ def initialize(argv = ARGV)
9
11
  self.argv = argv
10
- self.cli = ::Puma::CLI.new(argv, events)
12
+ self.cli = ::Puma::CLI.new(argv)
11
13
  end
12
14
 
13
15
  def run
@@ -8,6 +8,10 @@ module Puma
8
8
  def puma_default_options
9
9
  super.merge({ daemon: true })
10
10
  end
11
+
12
+ def daemonize
13
+ super.merge({ daemon: true })
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'version'
4
+
5
+ module Puma
6
+ module Daemon
7
+ module RunnerAdapter
8
+ class << self
9
+ def included(base)
10
+ base.class_eval do
11
+ attr_reader :options
12
+ attr_accessor :has_demonized
13
+ end
14
+
15
+ base.class_eval do
16
+ def output_header(mode)
17
+ super(mode)
18
+
19
+ daemonize! if daemon?
20
+ end
21
+
22
+ def daemon?
23
+ options[:daemon]
24
+ end
25
+
26
+ def daemonize!
27
+ return if has_demonized
28
+
29
+ log '* Puma Daemon: Demonizing...'
30
+ log "* Gem: puma-daemon v#{::Puma::Daemon::VERSION}"
31
+ log "* Gem: puma v#{::Puma::Const::VERSION}"
32
+
33
+ Process.daemon(true, true)
34
+ self.has_demonized = true
35
+ end
36
+
37
+ def log(str)
38
+ if super.respond_to?(:log)
39
+ super(str) unless str == 'Use Ctrl-C to stop'
40
+ else
41
+ puts(str)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Puma
4
4
  module Daemon
5
- VERSION = '0.1.2'
5
+ VERSION = '0.2.3'
6
6
  end
7
7
  end
data/lib/puma/daemon.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'puma'
4
+ require 'puma/const'
4
5
  require 'puma/runner'
5
6
  require 'puma/single'
6
7
  require 'puma/cluster'
@@ -8,7 +9,7 @@ require 'puma/dsl'
8
9
  require 'puma/cli'
9
10
 
10
11
  require 'puma/daemon/version'
11
- require 'puma/daemon/runner'
12
+ require 'puma/daemon/runner_adapter'
12
13
  require 'puma/daemon/configuration'
13
14
  require 'puma/daemon/cli'
14
15
  require 'puma/daemon/dsl'
@@ -16,8 +17,8 @@ require 'puma/daemon/dsl'
16
17
  module Puma
17
18
  module Daemon
18
19
  def self.daemonize!
19
- ::Puma::Single.include(::Puma::Daemon::Runner)
20
- ::Puma::Cluster.include(::Puma::Daemon::Runner)
20
+ ::Puma::Single.include(::Puma::Daemon::RunnerAdapter)
21
+ ::Puma::Cluster.include(::Puma::Daemon::RunnerAdapter)
21
22
  ::Puma::DSL.include(::Puma::Daemon::DSL)
22
23
  ::Puma::Configuration.prepend(::Puma::Daemon::Configuration)
23
24
  ::Puma::CLI.instance_eval { attr_reader :options }
data/puma-daemon.gemspec CHANGED
@@ -26,20 +26,21 @@ Gem::Specification.new do |spec|
26
26
  your config file.
27
27
  DESCRIPTION
28
28
 
29
- spec.homepage = 'https://github.com/kig/puma-daemon'
29
+ spec.homepage = 'https://github.com/kigster/puma-daemon'
30
30
  spec.license = 'MIT'
31
31
 
32
32
  spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
33
33
 
34
34
  spec.metadata['homepage_uri'] = spec.homepage
35
- spec.metadata['source_code_uri'] = 'https://github.com/kig/puma-daemon'
36
- spec.metadata['changelog_uri'] = 'https://github.com/kig/puma-daemon/master/CHANAGELOG'
35
+ spec.metadata['source_code_uri'] = 'https://github.com/kigster/puma-daemon'
36
+ spec.metadata['changelog_uri'] = 'https://github.com/kigster/puma-daemon/blob/master/CHANGELOG.md'
37
37
 
38
38
  # Specify which files should be added to the gem when it is released.
39
39
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
40
40
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
41
41
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
42
42
  end
43
+
43
44
  spec.bindir = 'exe'
44
45
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
45
46
  spec.require_paths = ['lib']
@@ -49,6 +50,7 @@ Gem::Specification.new do |spec|
49
50
 
50
51
  spec.add_development_dependency 'asciidoctor'
51
52
  spec.add_development_dependency 'codecov'
53
+ spec.add_development_dependency 'httparty'
52
54
  spec.add_development_dependency 'relaxed-rubocop'
53
55
  spec.add_development_dependency 'rspec-its'
54
56
  spec.add_development_dependency 'rubocop'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma-daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-05 00:00:00.000000000 Z
11
+ date: 2023-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puma
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: httparty
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: relaxed-rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -162,31 +176,38 @@ files:
162
176
  - CHANGELOG.md
163
177
  - Dockerfile.build
164
178
  - Dockerfile.download
165
- - Gemfile
179
+ - Gemfile.puma-v5
180
+ - Gemfile.puma-v6
166
181
  - LICENSE.txt
167
182
  - Makefile
168
183
  - README.adoc
184
+ - README.pdf
169
185
  - Rakefile
170
186
  - bin/console
171
187
  - bin/setup
188
+ - codecov.yml
172
189
  - config/puma_cluster.rb
173
190
  - config/puma_single.rb
191
+ - example/cluster.sh
192
+ - example/config.ru
193
+ - example/puma.rb
194
+ - example/single.sh
174
195
  - exe/pumad
175
196
  - lib/puma-daemon.rb
176
197
  - lib/puma/daemon.rb
177
198
  - lib/puma/daemon/cli.rb
178
199
  - lib/puma/daemon/configuration.rb
179
200
  - lib/puma/daemon/dsl.rb
180
- - lib/puma/daemon/runner.rb
201
+ - lib/puma/daemon/runner_adapter.rb
181
202
  - lib/puma/daemon/version.rb
182
203
  - puma-daemon.gemspec
183
- homepage: https://github.com/kig/puma-daemon
204
+ homepage: https://github.com/kigster/puma-daemon
184
205
  licenses:
185
206
  - MIT
186
207
  metadata:
187
- homepage_uri: https://github.com/kig/puma-daemon
188
- source_code_uri: https://github.com/kig/puma-daemon
189
- changelog_uri: https://github.com/kig/puma-daemon/master/CHANAGELOG
208
+ homepage_uri: https://github.com/kigster/puma-daemon
209
+ source_code_uri: https://github.com/kigster/puma-daemon
210
+ changelog_uri: https://github.com/kigster/puma-daemon/blob/master/CHANGELOG.md
190
211
  post_install_message:
191
212
  rdoc_options: []
192
213
  require_paths:
@@ -202,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
223
  - !ruby/object:Gem::Version
203
224
  version: '0'
204
225
  requirements: []
205
- rubygems_version: 3.2.13
226
+ rubygems_version: 3.3.22
206
227
  signing_key:
207
228
  specification_version: 4
208
229
  summary: Restore somewhat Puma's ability to self-daemonize, since Puma 5.0 dropped
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'version'
4
-
5
- module Puma
6
- module Daemon
7
- module Runner
8
- attr_reader :options
9
-
10
- def redirect_io
11
- super
12
-
13
- daemonize! if daemon?
14
- end
15
-
16
- def daemon?
17
- options[:daemon]
18
- end
19
-
20
- def daemonize!
21
- log "* Puma Daemon: Daemonizing (puma-daemon v#{::Puma::Daemon::VERSION})..."
22
- Process.daemon(true)
23
- end
24
-
25
- def log(str)
26
- super(str) unless str == 'Use Ctrl-C to stop'
27
- end
28
- end
29
- end
30
- end