mina-puma-systemd 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bba706a63a92692726ff2c26bc07b9efa79dfdedcdd7c8420be8e20989f9ddb6
4
+ data.tar.gz: ee45eb3521f66d81a63858f529ff1fd60435cdb05d852bf20d0b9da25cde1865
5
+ SHA512:
6
+ metadata.gz: 91415fd1f025faf1fd81695c98fa2334adb254abb3266e405870d1d3d4b1129cb09a0e5438495a7b0408f2a0a6271d764d8cd0e57a76077c99919e030961408a
7
+ data.tar.gz: 26568e17afaeced834e2e5f71c22c502c53475d2ad441692ee0172315effd2438e380c23854e3ca760c75765f2a96c7fb605fe3364174051b61e18e6dc5bad67
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .idea
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mina-puma.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Tobias Sandelius
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # Mina Puma
2
+
3
+ [Mina](https://github.com/mina-deploy/mina) tasks for handle with
4
+ [Puma](https://github.com/puma/puma) using [systemd](https://systemd.io).
5
+
6
+ This gem provides several mina tasks:
7
+
8
+ mina puma:reload # Restart puma (using phased restart)
9
+ mina puma:restart # Restart puma (using stop, then start)
10
+ mina puma:start # Start puma
11
+ mina puma:stop # Stop puma
12
+ mina puma:status # Get status
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ gem 'mina-puma-systemd', require: false
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Note: by just including this gem, does not mean your development server will be Puma, for that, you need explicitly add `gem 'puma'` to your Gemfile and configure it.
25
+ This gem does not (yet) create puma and systemd service config files, you have to do it manually.
26
+
27
+ ## Usage
28
+
29
+ Add this to your `config/deploy.rb` file:
30
+
31
+ require 'mina/puma-systemd'
32
+
33
+ Make sure the following settings are set in your `config/deploy.rb`:
34
+
35
+ * `deploy_to` - deployment path
36
+ * `rails_env` - rails environement (will default to `production`)
37
+
38
+ Make sure the following directories exists on your server (they are added automatically to `shared_dirs`:
39
+
40
+ * `shared/tmp/sockets` - directory for socket files.
41
+ * `shared/tmp/pids` - directory for pid files.
42
+
43
+ You can tweak some settings:
44
+
45
+ * `puma_systemctl` - systemctl command, default is ` sudo systemctl`. Other option would be `systemctl --user` if you have setup pumas as user service.
46
+ * `puma_service_name` - puma service name , default is `puma_#{fetch(:application_name)}_#{fetch(:puma_env)}`
47
+
48
+
49
+ Then:
50
+
51
+ ```
52
+ $ mina puma:start
53
+ ```
54
+
55
+ ## Example
56
+ ```ruby
57
+ require 'mina/puma-systemd'
58
+
59
+ task :deploy do
60
+ deploy do
61
+ invoke :'git:clone'
62
+ invoke :'deploy:link_shared_paths'
63
+ ...
64
+
65
+ on :launch do
66
+ ...
67
+ invoke :'puma:reload'
68
+ end
69
+ end
70
+ end
71
+ ```
72
+
73
+ ## sudo configuration
74
+ By default plugin relies on sudo to run systemctl command. You should give proper permissions to the user which runs your app.
75
+ ```bash
76
+ Cmnd_Alias SERVICES = /usr/bin/systemctl start *, /usr/bin/systemctl stop *, /usr/bin/systemctl reload *, /usr/bin/systemctl restart *, /usr/bin/systemctl status *, /usr/bin/systemctl enable *, /usr/bin/systemctl disable *
77
+ deploy ALL=(ALL) NOPASSWD: SERVICES
78
+
79
+ ```
80
+
81
+ If you are paranoid, substitute `*` with exact service name. Better option would be to run as user service, but it did not work for me out of box on AWS AMI2.
82
+
83
+ ## TODO
84
+ * Generate and upload puma.rb file
85
+ * Generate and upload puma systemd service
86
+
87
+ ## Contributing
88
+
89
+ 1. Fork it
90
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
91
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
92
+ 4. Push to the branch (`git push origin my-new-feature`)
93
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,63 @@
1
+ require 'mina/bundler'
2
+ require 'mina/rails'
3
+
4
+ namespace :puma do
5
+ set :shared_dirs, fetch(:shared_dirs, []).push("tmp/sockets", "tmp/pids")
6
+
7
+ set :puma_role, -> { fetch(:user) }
8
+ set :puma_env, -> { fetch(:rails_env, 'production') }
9
+ set :puma_root_path, -> { fetch(:current_path) }
10
+
11
+ set :puma_systemctl, -> { fetch(:systemctl, "sudo systemctl")}
12
+ set :puma_service_name, -> { "puma_#{fetch(:application_name)}_#{fetch(:puma_env)}" }
13
+
14
+ desc 'Enable puma'
15
+ task enable: :remote_environment do
16
+ comment "Enabling Puma..."
17
+ command "#{fetch(:puma_systemctl)} enable #{fetch(:puma_service_name)}"
18
+ end
19
+
20
+ desc 'Disable puma'
21
+ task start: :remote_environment do
22
+ comment "Enabling Puma..."
23
+ command "#{fetch(:puma_systemctl)} disable #{fetch(:puma_service_name)}"
24
+ end
25
+
26
+ desc 'Start puma'
27
+ task start: :remote_environment do
28
+ comment "Starting Puma..."
29
+ command "#{fetch(:puma_systemctl)} start #{fetch(:puma_service_name)}"
30
+ end
31
+
32
+ desc 'Stop puma'
33
+ task stop: :remote_environment do
34
+ comment "Stopping Puma..."
35
+ command "#{fetch(:puma_systemctl)} stop #{fetch(:puma_service_name)}"
36
+ end
37
+
38
+ desc 'Restart puma'
39
+ task restart: :remote_environment do
40
+ comment "Restart Puma...."
41
+ command "#{fetch(:puma_systemctl)} restart #{fetch(:puma_service_name)}"
42
+ end
43
+
44
+ desc 'Reload puma (phased restart)'
45
+ task reload: :remote_environment do
46
+ command %[
47
+ if #{fetch(:puma_systemctl)} is-active --quiet #{fetch(:puma_service_name)} ; then
48
+ echo "Reload Puma -- phased..."
49
+ #{fetch(:puma_systemctl)} reload #{fetch(:puma_service_name)}
50
+ else
51
+ echo "Starting Puma..."
52
+ #{fetch(:puma_systemctl)} start #{fetch(:puma_service_name)}
53
+ fi
54
+ ]
55
+ end
56
+
57
+ desc 'Get status of puma'
58
+ task status: :remote_environment do
59
+ comment "Puma status..."
60
+ command "#{fetch(:puma_systemctl)} status -l #{fetch(:puma_service_name)}"
61
+ end
62
+
63
+ end
@@ -0,0 +1,5 @@
1
+ module Mina
2
+ module PumaSystemd
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ load File.expand_path("../puma/tasks.rake", __FILE__)
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mina/puma_systemd/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'mina-puma-systemd'
8
+ spec.version = Mina::PumaSystemd::VERSION
9
+ spec.authors = ['Vladimir Elchinov']
10
+ spec.email = ['elik@elik.ru']
11
+ spec.description = %q{Puma tasks for Mina and systemd}
12
+ spec.summary = %q{Puma tasks for Mina and systemd}
13
+ spec.homepage = 'https://github.com/railsblueprint/mina-puma-systemd'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'mina', '~> 1.2.0'
22
+ spec.add_dependency 'puma', '>= 2.13'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mina-puma-systemd
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Vladimir Elchinov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-09-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mina
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: puma
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.13'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Puma tasks for Mina and systemd
70
+ email:
71
+ - elik@elik.ru
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - lib/mina/puma_systemd.rb
82
+ - lib/mina/puma_systemd/tasks.rake
83
+ - lib/mina/puma_systemd/version.rb
84
+ - mina-puma-systemd.gemspec
85
+ homepage: https://github.com/railsblueprint/mina-puma-systemd
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubygems_version: 3.0.3
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Puma tasks for Mina and systemd
108
+ test_files: []