flame_server_toys 0.2.2

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: 7f45aba613713cf69e1168a2ee6dac2391d22f034f707ac8651445d284c37c6a
4
+ data.tar.gz: e379aac82ee993b8469031b147ba217f83bd3d92f85eba7608c4e8bf53a6dcea
5
+ SHA512:
6
+ metadata.gz: 02ca275f76b08a1a388a8e1e14bcf25ac0508dde5978fe5744229e8f5e340bb9d42716fb0fa6cf52031b99785335546f5e6cdafb942b739eb74b9fc8e143838e
7
+ data.tar.gz: 779be44bf684f2351ecbc1e4a59ab9dc7bcfdd05b9599dd2af43e402ba84c5d97bba6b04dc7f6bf7a822a45f67e0cb270840e45092937494801343f338f97222
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ # Changelog
2
+
3
+ ## master (unreleased)
4
+
5
+ ## 0.2.2 (2020-09-23)
6
+
7
+ ## 0.2.1 (2020-08-24)
8
+
9
+ * Fix system calls.
10
+
11
+ ## 0.2.0 (2020-08-23)
12
+
13
+ * Update `toys`.
14
+
15
+ ## 0.1.1 (2020-08-21)
16
+
17
+ * Wrap `sh` into `Bundler.with_unbundled_env`.
18
+ See <https://github.com/dazuma/toys/issues/65>.
19
+ * Deny `phased-restart` when there is no `prune_bundler` in Puma's config.
20
+
21
+ ## 0.1.0 (2020-08-02)
22
+
23
+ * Initial release.
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Alexander Popov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Flame Server Toys
2
+
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/flame_server_toys?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/flame_server_toys)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/flame_server_toys/master.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/flame_server_toys)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/flame_server_toys.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/flame_server_toys)
6
+ [![Depfu](https://img.shields.io/depfu/AlexWayfer/flame_server_toys?style=flat-square)](https://depfu.com/repos/github/AlexWayfer/flame_server_toys)
7
+ [![Inline docs](https://inch-ci.org/github/AlexWayfer/flame_server_toys.svg?branch=master)](https://inch-ci.org/github/AlexWayfer/flame_server_toys)
8
+ [![License](https://img.shields.io/github/license/AlexWayfer/flame_server_toys.svg?style=flat-square)](https://github.com/AlexWayfer/flame_server_toys/blob/master/LICENSE.txt)
9
+ [![Gem](https://img.shields.io/gem/v/flame_server_toys.svg?style=flat-square)](https://rubygems.org/gems/flame_server_toys)
10
+
11
+ Toys for [Flame](https://github.com/AlexWayfer/flame) web application server management,
12
+ like start, stop, restart, etc.
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ ```ruby
19
+ gem 'flame_server_toys'
20
+ ```
21
+
22
+ And then execute:
23
+
24
+ ```shell
25
+ bundle install
26
+ ```
27
+
28
+ Or install it yourself as:
29
+
30
+ ```shell
31
+ gem install flame_server_toys
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ```ruby
37
+ ## .toys/.toys.rb
38
+ require "#{__dir__}/../config/base"
39
+
40
+ require 'flame_server_toys'
41
+ expand FlameServerToys::Template,
42
+ config_proc: (proc do
43
+ MyProject::Config::Base.new
44
+ end)
45
+ ```
46
+
47
+ On `start` and `restart` commands in `development` environment there will be spawned
48
+ [Filewatchers](https://github.com/filewatcher/filewatcher) from `filewatcher.yaml` file.
49
+
50
+ ## Development
51
+
52
+ After checking out the repo, run `bundle install` to install dependencies.
53
+
54
+ Then, run `toys rspec` to run the tests.
55
+
56
+ To install this gem onto your local machine, run `toys gem install`.
57
+
58
+ To release a new version, run `toys gem release %version%`.
59
+ See how it works [here](https://github.com/AlexWayfer/gem_toys#release).
60
+
61
+ ## Contributing
62
+
63
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/AlexWayfer/flame_server_toys).
64
+
65
+ ## License
66
+
67
+ The gem is available as open source under the terms of the
68
+ [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'flame_server_toys/version'
4
+ require_relative 'flame_server_toys/template'
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'toys-core'
4
+
5
+ module FlameServerToys
6
+ ## Root template for `server` tool
7
+ class Template
8
+ include Toys::Template
9
+
10
+ attr_reader :config_proc
11
+
12
+ def initialize(config_proc:)
13
+ @config_proc = config_proc
14
+ end
15
+
16
+ on_expand do |template|
17
+ tool :server do
18
+ require_relative 'template/_base'
19
+
20
+ subtool_apply do
21
+ ## Order is important because `sh` is overriding in `CommonCode`
22
+
23
+ include :exec, exit_on_nonzero_status: true
24
+
25
+ include Template::Base::CommonCode
26
+ end
27
+
28
+ require 'gorilla_patch/inflections'
29
+ using GorillaPatch::Inflections
30
+
31
+ %w[start stop restart phased_restart monitor status].each do |subtool|
32
+ require_relative "template/#{subtool}"
33
+ expand Template.const_get(subtool.camelize, false), config_proc: template.config_proc
34
+ end
35
+ end
36
+
37
+ alias_tool :s, :server
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'memery'
4
+ require 'yaml'
5
+
6
+ require_relative '_pids_file'
7
+
8
+ module FlameServerToys
9
+ class Template
10
+ ## Base class for toys
11
+ class Base
12
+ include Toys::Template
13
+ include Memery
14
+
15
+ def initialize(config_proc:)
16
+ @config_proc = config_proc
17
+ end
18
+
19
+ memoize def config
20
+ @config_proc.call
21
+ end
22
+
23
+ ## Common code for toys
24
+ module CommonCode
25
+ include Memery
26
+
27
+ private
28
+
29
+ def sh(command, print: true, exit_on_fail: true)
30
+ options = {}
31
+ options[:log_level] = Logger::UNKNOWN if print
32
+ options[:exit_on_nonzero_status] = exit_on_fail
33
+ super sh_command(command), **options
34
+ end
35
+
36
+ def sh_spawn(command, print: true)
37
+ puts "spawn #{command}" if print
38
+ spawn sh_command(command), pgroup: true
39
+ end
40
+
41
+ def sh_command(command)
42
+ require 'shellwords'
43
+
44
+ escaped_command = Shellwords.escape(command)
45
+ "sh -c #{escaped_command}"
46
+ end
47
+
48
+ def server(command)
49
+ puts "Environment: #{@config[:environment]}"
50
+
51
+ sh "#{context_directory}/exe/setup/ruby.sh"
52
+ sh("#{context_directory}/exe/setup/node.sh") if %i[start restart].include?(command)
53
+
54
+ if %i[stop restart].include?(command)
55
+ filewatcher_pids_file = pids_file_class.new(:filewatcher)
56
+ filewatcher_pids_file.kill_each.delete
57
+ end
58
+
59
+ web_server(command)
60
+ end
61
+
62
+ def web_server(command)
63
+ if @config[:environment] == 'development' && %i[start restart].include?(command)
64
+ return development_restart
65
+ end
66
+
67
+ waiting_mailing_lock if %i[stop restart phased-restart].include?(command)
68
+ puma_command command
69
+ end
70
+
71
+ def puma_command(command)
72
+ ## Don't use `bundle exec`: https://github.com/dazuma/toys/issues/65
73
+ sh "pumactl #{command}"
74
+ end
75
+
76
+ def development_restart
77
+ spawn_development_filewatchers
78
+
79
+ puma_command File.exist?(@config[:server][:puma_pid_file]) ? 'restart' : 'start'
80
+ rescue SystemExit, Interrupt => e
81
+ pids_file_class.new(:filewatcher).kill_each.delete
82
+
83
+ raise e
84
+ end
85
+
86
+ def spawn_development_filewatchers
87
+ development_filewatchers =
88
+ YAML.load_file("#{context_directory}/filewatchers.yaml").map do |args|
89
+ filewatcher_command args[:pattern], args[:command], exclude: args[:exclude]
90
+ end
91
+
92
+ filewatcher_pids = development_filewatchers.map { |command| sh_spawn command }
93
+
94
+ pids_file_class.new(:filewatcher, filewatcher_pids).dump
95
+ end
96
+
97
+ def filewatcher_command(pattern, execute, exclude: nil)
98
+ ## Don't use `bundle exec`, it's already required by `toys`
99
+ ## https://github.com/dazuma/toys/issues/65
100
+ <<-CMD.split.join(' ')
101
+ filewatcher #{"--exclude '#{exclude}'" unless exclude.nil?} '#{pattern}' '#{execute}'
102
+ CMD
103
+ end
104
+
105
+ def waiting_mailing_lock
106
+ while Dir[File.join(@config[:tmp_dir], 'mailing_*')].any?
107
+ puts Paint['Mails sending in progress!', :bold, :red]
108
+ puts 'Waiting...'
109
+ sleep 1
110
+ end
111
+ end
112
+
113
+ memoize def pids_file_class
114
+ subclass = Class.new(PidsFile)
115
+ pids_dir = @config[:pids_dir]
116
+ subclass.class_exec do
117
+ self.pids_dir = pids_dir
118
+ end
119
+ subclass
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require 'fileutils'
5
+
6
+ module FlameServerToys
7
+ class Template
8
+ ## Class for pids files
9
+ class PidsFile
10
+ class << self
11
+ ## It will be set in the Base template from received config
12
+ attr_accessor :pids_dir
13
+ end
14
+
15
+ def initialize(name, *pids)
16
+ @file = File.join self.class.pids_dir, "#{name}.pids"
17
+ @pids = pids.any? ? pids : read
18
+ end
19
+
20
+ def dump(pids = @pids)
21
+ FileUtils.mkdir_p self.class.pids_dir
22
+ puts "PidsFile dump : #{pids} => #{@file}"
23
+ File.write @file, pids.join($RS)
24
+ end
25
+
26
+ def read
27
+ return unless File.exist?(@file)
28
+
29
+ @pids = File.read(@file).split($RS).map(&:to_i)
30
+ puts "PidsFile read : #{@pids}"
31
+ @pids
32
+ end
33
+
34
+ def kill_each(pids = @pids)
35
+ Array(pids).each do |pid|
36
+ puts "PidsFile kill : #{pid}"
37
+ Process.kill('TERM', -Process.getpgid(pid))
38
+ rescue Errno::ESRCH
39
+ puts "Process #{pid} doesn't exist"
40
+ end
41
+ self
42
+ end
43
+
44
+ def delete
45
+ return unless File.exist?(@file)
46
+
47
+ File.delete @file
48
+ end
49
+ end
50
+
51
+ private_constant :PidsFile
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Monitor server logs
6
+ class Monitor < Base
7
+ on_expand do |template|
8
+ tool :monitor do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ sh "tail -f #{File.join(@config[:logs_dir], '{stdout,stderr}')}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Phased restart server
6
+ class PhasedRestart < Base
7
+ on_expand do |template|
8
+ tool 'phased-restart' do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ puma_config = File.read "#{context_directory}/config/puma.rb"
13
+ unless puma_config.lines.any? { |line| line.start_with? 'prune_bundler' }
14
+ puts "Don't do phased restart without `prune_bundler` in Puma config."
15
+ return
16
+ end
17
+
18
+ server 'phased-restart'
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Restart server
6
+ class Restart < Base
7
+ on_expand do |template|
8
+ tool :restart do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ server :restart
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Start server
6
+ class Start < Base
7
+ on_expand do |template|
8
+ tool :start do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ server :start
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Status of server
6
+ class Status < Base
7
+ on_expand do |template|
8
+ tool :status do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ puts
13
+ puts 'Filewatcher:'
14
+ puts
15
+ ps_with_grep '[f]ilewatcher'
16
+ puts
17
+ puts 'Puma:'
18
+ puts
19
+ ps_with_grep '[p]uma[\ :]'
20
+ end
21
+
22
+ private
23
+
24
+ def ps_with_grep(pattern)
25
+ sh "ps aux | grep #{pattern} --color", print: false, exit_on_fail: false
26
+ end
27
+ end
28
+
29
+ alias_tool :ps, :status
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ class Template
5
+ ## Stop server
6
+ class Stop < Base
7
+ on_expand do |template|
8
+ tool :stop do
9
+ to_run do
10
+ @config = template.config
11
+
12
+ server :stop
13
+
14
+ pids_file_class.new(:filewatcher).kill_each.delete
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlameServerToys
4
+ VERSION = '0.2.2'
5
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flame_server_toys
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Popov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: alt_memery
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '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: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: filewatcher-cli
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0.beta1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0.beta1
41
+ - !ruby/object:Gem::Dependency
42
+ name: gorilla_patch
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: toys-core
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.11.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.11.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.9'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: gem_toys
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.4.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: toys
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.11.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.11.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: codecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.2.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.2.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.9'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.19.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.19.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.91.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.91.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-performance
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.0'
209
+ description: 'Toys for Flame web application server management, like start, stop,
210
+ restart, etc.
211
+
212
+ '
213
+ email:
214
+ - alex.wayfer@gmail.com
215
+ executables: []
216
+ extensions: []
217
+ extra_rdoc_files: []
218
+ files:
219
+ - CHANGELOG.md
220
+ - LICENSE.txt
221
+ - README.md
222
+ - lib/flame_server_toys.rb
223
+ - lib/flame_server_toys/template.rb
224
+ - lib/flame_server_toys/template/_base.rb
225
+ - lib/flame_server_toys/template/_pids_file.rb
226
+ - lib/flame_server_toys/template/monitor.rb
227
+ - lib/flame_server_toys/template/phased_restart.rb
228
+ - lib/flame_server_toys/template/restart.rb
229
+ - lib/flame_server_toys/template/start.rb
230
+ - lib/flame_server_toys/template/status.rb
231
+ - lib/flame_server_toys/template/stop.rb
232
+ - lib/flame_server_toys/version.rb
233
+ homepage: https://github.com/AlexWayfer/flame_server_toys
234
+ licenses:
235
+ - MIT
236
+ metadata:
237
+ source_code_uri: https://github.com/AlexWayfer/flame_server_toys
238
+ homepage_uri: https://github.com/AlexWayfer/flame_server_toys
239
+ changelog_uri: https://github.com/AlexWayfer/flame_server_toys/blob/master/CHANGELOG.md
240
+ post_install_message:
241
+ rdoc_options: []
242
+ require_paths:
243
+ - lib
244
+ required_ruby_version: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: '2.5'
249
+ required_rubygems_version: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - ">="
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ requirements: []
255
+ rubygems_version: 3.1.2
256
+ signing_key:
257
+ specification_version: 4
258
+ summary: Toys for Flame web application server management
259
+ test_files: []