capistrano-cookbook 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/capistrano-cookbook.gemspec +1 -0
- data/lib/capistrano/cookbook.rb +2 -1
- data/lib/capistrano/cookbook/helpers/setup_config_values.rb +19 -32
- data/lib/capistrano/cookbook/helpers/{template.rb → smart_template.rb} +18 -5
- data/lib/capistrano/cookbook/puma_systemd.rb +1 -0
- data/lib/capistrano/cookbook/sidekiq_systemd.rb +1 -0
- data/lib/capistrano/cookbook/tasks/nginx.cap +1 -1
- data/lib/capistrano/cookbook/tasks/{systemd.cap → puma_systemd.cap} +1 -1
- data/lib/capistrano/cookbook/tasks/setup_config.cap +20 -8
- data/lib/capistrano/cookbook/tasks/sidekiq_systemd.cap +15 -0
- data/lib/capistrano/cookbook/version.rb +1 -1
- data/lib/generators/capistrano/reliably_deploying_rails/templates/deploy.rb.erb +8 -9
- data/lib/generators/capistrano/reliably_deploying_rails/templates/production.rb.erb +1 -1
- data/lib/generators/capistrano/reliably_deploying_rails/templates/puma_monit.conf.erb +2 -5
- data/lib/generators/capistrano/reliably_deploying_rails/templates/sidekiq.service.capistrano.erb +4 -4
- data/lib/generators/capistrano/reliably_deploying_rails/templates/sidekiq_monit.erb +2 -2
- metadata +22 -5
- data/lib/capistrano/cookbook/systemd.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccf86ecd4d2c04f71dd86f6aaf38877d57c1b7482e21435986b58dcbd768e18c
|
4
|
+
data.tar.gz: 1a9f6bc210c07faf2c998ad13f438b97ac4efbccdb3734993e173f94cf7953be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 936557739c95b9b6c4d2f7bc92fa300778437e0c335b84670c7b4d9e67dce28daa65196f0713cf2e9babdb3fe913777c181bf5587f9378880b4567f091453893
|
7
|
+
data.tar.gz: e55cb0581cfdde734cdea13b675ccb89aea40f1fab79c1280b1eda86590b37fb0cb3c22af6565d56e94d7fb4466b80d6823cb398ccb39d5b16e4277bd85066a2
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 5.0.1 (March 2021)
|
4
|
+
|
5
|
+
- Adds full support for deploy (but not config creation) without sudo access
|
6
|
+
- Refactor config files to use single array of hashes with flags
|
7
|
+
- Refactor Sidekiq and Monit configurations to copy files directly rather than using symlinks to avoid potential root access leak
|
8
|
+
- Fixes bug where object identifier was outputted in logs rather than filename
|
9
|
+
- Fixes nginx not being reloaded after `setup_config` due to shared log directory not yet existing
|
10
|
+
|
11
|
+
## 5.0.0 (March 2021)
|
12
|
+
|
13
|
+
- Full overhaul to support Rails 6 and Ubuntu 20.04
|
data/capistrano-cookbook.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_dependency 'capistrano', '~> 3.16'
|
21
21
|
spec.add_dependency 'capistrano3-puma', '~> 5.0.4'
|
22
|
+
spec.add_dependency 'capistrano-sidekiq', '~> 2.0'
|
22
23
|
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.5"
|
24
25
|
spec.add_development_dependency "rake"
|
data/lib/capistrano/cookbook.rb
CHANGED
@@ -9,6 +9,7 @@ module Capistrano
|
|
9
9
|
require 'capistrano/cookbook/run_tests'
|
10
10
|
require 'capistrano/cookbook/setup_config'
|
11
11
|
require 'capistrano/cookbook/create_database'
|
12
|
-
require 'capistrano/cookbook/
|
12
|
+
require 'capistrano/cookbook/puma_systemd'
|
13
|
+
require 'capistrano/cookbook/sidekiq_systemd'
|
13
14
|
end
|
14
15
|
end
|
@@ -1,59 +1,46 @@
|
|
1
1
|
module Capistrano
|
2
2
|
module Cookbook
|
3
3
|
class SetupConfigValues
|
4
|
-
def symlinks
|
5
|
-
fetch(:symlinks) || symlinks_defaults
|
6
|
-
end
|
7
|
-
|
8
|
-
def executable_config_files
|
9
|
-
fetch(:executable_config_files) || executable_config_files_defaults
|
10
|
-
end
|
11
|
-
|
12
4
|
def config_files
|
13
5
|
fetch(:config_files) || config_files_defaults
|
14
6
|
end
|
15
7
|
|
16
8
|
private
|
17
9
|
|
18
|
-
def
|
10
|
+
def config_files_defaults
|
19
11
|
base = [
|
20
12
|
{
|
21
|
-
source:
|
22
|
-
|
13
|
+
source: 'log_rotation',
|
14
|
+
destination: "/etc/logrotate.d/#{fetch(:full_app_name)}",
|
15
|
+
executable: false,
|
16
|
+
as_root: true
|
17
|
+
},
|
18
|
+
{
|
19
|
+
source: 'database.example.yml',
|
20
|
+
destination: "#{shared_path}/config/database.example.yml",
|
21
|
+
executable: false,
|
22
|
+
as_root: false
|
23
23
|
}
|
24
24
|
]
|
25
|
+
|
25
26
|
return base unless sidekiq_enabled?
|
26
27
|
|
27
28
|
base + [
|
28
29
|
{
|
29
|
-
source:
|
30
|
-
|
30
|
+
source: 'sidekiq.service.capistrano',
|
31
|
+
destination: "/home/#{fetch(:deploy_user)}/.config/systemd/user/#{fetch(:sidekiq_service_unit_name)}.service",
|
32
|
+
executable: false,
|
33
|
+
as_root: false
|
31
34
|
},
|
32
35
|
{
|
33
36
|
source: "sidekiq_monit",
|
34
|
-
|
37
|
+
destination: "/etc/monit/conf.d/#{fetch(:full_app_name)}_sidekiq.conf",
|
38
|
+
executable: false,
|
39
|
+
as_root: true
|
35
40
|
}
|
36
41
|
]
|
37
42
|
end
|
38
43
|
|
39
|
-
def executable_config_files_defaults
|
40
|
-
%w(
|
41
|
-
)
|
42
|
-
end
|
43
|
-
|
44
|
-
def config_files_defaults
|
45
|
-
base = %w(
|
46
|
-
database.example.yml
|
47
|
-
log_rotation
|
48
|
-
)
|
49
|
-
return base unless sidekiq_enabled?
|
50
|
-
|
51
|
-
base + %w(
|
52
|
-
sidekiq.service.capistrano
|
53
|
-
sidekiq_monit
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
44
|
def sidekiq_enabled?
|
58
45
|
defined?(Capistrano::Sidekiq) == 'constant' && Capistrano::Sidekiq.class == Class
|
59
46
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'stringio'
|
3
|
+
|
1
4
|
# will first try and copy the file:
|
2
5
|
# config/deploy/#{full_app_name}/#{from}.erb
|
3
6
|
# to:
|
@@ -11,13 +14,12 @@
|
|
11
14
|
# ones to be over-ridden
|
12
15
|
# if the target file name is the same as the source then
|
13
16
|
# the second parameter can be left out
|
14
|
-
def smart_template(from, to=
|
15
|
-
to ||= from
|
16
|
-
full_to_path = "#{shared_path}/config/#{to}"
|
17
|
+
def smart_template(from, to, as_root=false)
|
17
18
|
if from_erb_path = template_file(from)
|
18
19
|
from_erb = StringIO.new(ERB.new(File.read(from_erb_path)).result(binding))
|
19
|
-
upload!
|
20
|
-
|
20
|
+
upload!(from_erb, to) unless as_root
|
21
|
+
sudo_upload!(from_erb, to) if as_root
|
22
|
+
info "copying: #{from} to: #{to}"
|
21
23
|
else
|
22
24
|
error "error #{from} not found"
|
23
25
|
end
|
@@ -35,3 +37,14 @@ def template_file(name)
|
|
35
37
|
end
|
36
38
|
return nil
|
37
39
|
end
|
40
|
+
|
41
|
+
def sudo_upload!(file_path, remote_path, mode: '644', owner: 'root:root')
|
42
|
+
tmp_path = "/tmp/#{SecureRandom.uuid}"
|
43
|
+
|
44
|
+
upload!(file_path, tmp_path)
|
45
|
+
|
46
|
+
execute(:sudo, :mkdir, '-p', File.dirname(remote_path))
|
47
|
+
execute(:sudo, :mv, '-f', tmp_path, remote_path)
|
48
|
+
execute(:sudo, :chmod, mode, remote_path)
|
49
|
+
execute(:sudo, :chown, owner, remote_path)
|
50
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path("tasks/puma_systemd.cap", File.dirname(__FILE__))
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path("tasks/sidekiq_systemd.cap", File.dirname(__FILE__))
|
@@ -6,8 +6,8 @@ namespace :puma do
|
|
6
6
|
if fetch(:puma_systemctl_user) == :system
|
7
7
|
sudo "#{fetch(:puma_systemctl_bin)} reload-or-restart #{fetch(:puma_service_unit_name)}"
|
8
8
|
else
|
9
|
-
execute "#{fetch(:puma_systemctl_bin)}", "--user", "reload", fetch(:puma_service_unit_name)
|
10
9
|
execute :loginctl, "enable-linger", fetch(:puma_lingering_user) if fetch(:puma_enable_lingering)
|
10
|
+
execute "#{fetch(:puma_systemctl_bin)}", "--user", "reload-or-restart", fetch(:puma_service_unit_name)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'capistrano/dsl'
|
2
2
|
require 'capistrano/cookbook/helpers/setup_config_values'
|
3
3
|
require 'capistrano/cookbook/helpers/substitute_strings'
|
4
|
-
require 'capistrano/cookbook/helpers/
|
4
|
+
require 'capistrano/cookbook/helpers/smart_template'
|
5
5
|
require 'capistrano/cookbook/nginx'
|
6
6
|
require 'capistrano/cookbook/monit'
|
7
7
|
require 'securerandom'
|
@@ -13,22 +13,24 @@ namespace :deploy do
|
|
13
13
|
on roles(:app) do
|
14
14
|
# make the config dir
|
15
15
|
execute :mkdir, "-p #{shared_path}/config"
|
16
|
+
execute :mkdir, "-p /home/#{fetch(:deploy_user)}/.config/systemd/user"
|
16
17
|
|
17
18
|
# config files to be uploaded to shared/config, see the
|
18
19
|
# definition of smart_template for details of operation.
|
19
20
|
conf.config_files.each do |file|
|
20
|
-
smart_template file
|
21
|
+
smart_template(file[:source], file[:destination], file[:as_root])
|
22
|
+
execute(:chmod, "+x #{file[:destination]}") if file[:executable]
|
21
23
|
end
|
22
24
|
|
23
25
|
# which of the above files should be marked as executable
|
24
|
-
conf.executable_config_files.each do |file|
|
25
|
-
|
26
|
-
end
|
26
|
+
# conf.executable_config_files.each do |file|
|
27
|
+
# execute :chmod, "+x #{shared_path}/config/#{file}"
|
28
|
+
# end
|
27
29
|
|
28
30
|
# symlink stuff which should be... symlinked
|
29
|
-
conf.symlinks.each do |symlink|
|
30
|
-
|
31
|
-
end
|
31
|
+
# conf.symlinks.each do |symlink|
|
32
|
+
# sudo "ln -nfs #{shared_path}/config/#{symlink[:source]} #{sub_strings(symlink[:link])}"
|
33
|
+
# end
|
32
34
|
|
33
35
|
if File.exists?(File.join('config', 'master.key'))
|
34
36
|
upload! File.join('config', 'master.key'), File.join(shared_path, 'config', 'master.key')
|
@@ -41,6 +43,12 @@ end
|
|
41
43
|
# remove the default nginx configuration as it will tend to conflict with our configs
|
42
44
|
before 'deploy:setup_config', 'nginx:remove_default_vhost'
|
43
45
|
|
46
|
+
# make sure that shared directories etc exist before running otherwise the
|
47
|
+
# initial nginx reload won't work because of the nginx log file directory path
|
48
|
+
# not existing
|
49
|
+
before 'deploy:setup_config', 'deploy:check:directories'
|
50
|
+
before 'deploy:setup_config', 'deploy:check:linked_dirs'
|
51
|
+
|
44
52
|
# After setup config has generated and setup initial files, run the Capistrano Puma
|
45
53
|
# tasks responsible for uploading config files. Note that `setup_config` creates overrides
|
46
54
|
# for these in `config/deploy/templates` so we're not using the default ones from the gem
|
@@ -48,6 +56,10 @@ after 'deploy:setup_config', 'puma:config'
|
|
48
56
|
after 'deploy:setup_config', 'puma:nginx_config'
|
49
57
|
after 'deploy:setup_config', 'puma:monit:config'
|
50
58
|
after 'deploy:setup_config', 'puma:systemd:config'
|
59
|
+
after 'deploy:setup_config', 'puma:systemd:enable'
|
60
|
+
|
61
|
+
# Enable the sidekiq systemd service so that it's started automatically on (re)boot
|
62
|
+
after 'deploy:setup_config', 'sidekiq:systemd:enable' if (defined?(Capistrano::Sidekiq) == 'constant' && Capistrano::Sidekiq.class == Class)
|
51
63
|
|
52
64
|
# reload nginx to it will pick up any modified vhosts from setup_config
|
53
65
|
after 'deploy:setup_config', 'nginx:reload'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
namespace :sidekiq do
|
2
|
+
namespace :systemd do
|
3
|
+
desc 'Install systemd sidekiq service'
|
4
|
+
task :enable do
|
5
|
+
on roles fetch(:sidekiq_roles) do |role|
|
6
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
7
|
+
execute :sudo, :systemctl, "enable", fetch(:sidekiq_service_unit_name)
|
8
|
+
else
|
9
|
+
execute :systemctl, "--user", "enable", fetch(:sidekiq_service_unit_name)
|
10
|
+
execute :loginctl, "enable-linger", fetch(:sidekiq_systemctl_user) if fetch(:sidekiq_enable_lingering)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -13,20 +13,19 @@ set :rbenv_ruby, '3.0.0'
|
|
13
13
|
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
|
14
14
|
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
|
15
15
|
|
16
|
-
<% if @generate_sidekiq %>
|
17
|
-
# Setup sidekiq, make sure we run sidekiq as our deployment user, otherwise
|
18
|
-
# it will default to root which a) is insecture and b) will lead to lots of
|
19
|
-
# strange permissions issues
|
20
|
-
set :sidekiq_service_unit_user, :system
|
21
|
-
set :sidekiq_user, fetch(:deploy_user)
|
22
|
-
<% end %>
|
23
|
-
|
24
16
|
# setup puma to operate in clustered mode, required for zero downtime deploys
|
25
17
|
set :puma_preload_app, false
|
26
18
|
set :puma_init_active_record, true
|
27
19
|
set :puma_workers, 3
|
20
|
+
set :puma_systemctl_user, fetch(:deploy_user)
|
21
|
+
set :puma_enable_lingering, true
|
22
|
+
|
23
|
+
<% if @generate_sidekiq %>
|
24
|
+
set :sidekiq_systemctl_user, fetch(:deploy_user)
|
25
|
+
set :sidekiq_enable_lingering, true
|
26
|
+
<% end %>
|
28
27
|
|
29
|
-
# how many old releases do we want to keep
|
28
|
+
# how many old releases do we want to keep
|
30
29
|
set :keep_releases, 5
|
31
30
|
|
32
31
|
# Directories that should be linked to the shared folder
|
@@ -14,7 +14,7 @@ set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
|
14
14
|
<% if @generate_sidekiq %>
|
15
15
|
# Name sidekiq systemd service after the app and stage name so that
|
16
16
|
# multiple apps and stages can co-exist on the same machine if needed
|
17
|
-
set :sidekiq_service_unit_name, "#{fetch(:full_app_name)}
|
17
|
+
set :sidekiq_service_unit_name, "sidekiq_#{fetch(:full_app_name)}"
|
18
18
|
<% end %>
|
19
19
|
|
20
20
|
server '<%= @production_server_address %>', user: 'deploy', roles: %w{web app db}, primary: true
|
@@ -1,7 +1,4 @@
|
|
1
|
-
# Monit configuration for Puma
|
2
|
-
# Service name: <%= puma_monit_service_name %>
|
3
|
-
#
|
4
1
|
check process <%= puma_monit_service_name %>
|
5
2
|
with pidfile "<%= fetch(:puma_pid) %>"
|
6
|
-
start program = "/usr/bin/systemctl start <%= fetch(:puma_service_unit_name) %>"
|
7
|
-
stop program = "/usr/bin/systemctl stop <%= fetch(:puma_service_unit_name) %>"
|
3
|
+
start program = "/bin/bash -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) /usr/bin/systemctl start --user <%= fetch(:puma_service_unit_name) %>'" as uid "<%= fetch(:puma_systemctl_user) %>" and gid "<%= fetch(:puma_systemctl_user) %>"
|
4
|
+
stop program = "/bin/bash -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) /usr/bin/systemctl stop --user <%= fetch(:puma_service_unit_name) %>'" as uid "<%= fetch(:puma_systemctl_user) %>" and gid "<%= fetch(:puma_systemctl_user) %>"
|
data/lib/generators/capistrano/reliably_deploying_rails/templates/sidekiq.service.capistrano.erb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
<% # Adapted from: https://github.com/seuros/capistrano-sidekiq/blob/master/lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb %>
|
2
|
-
|
3
1
|
[Unit]
|
4
2
|
Description=sidekiq for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>
|
5
3
|
After=syslog.target network.target
|
@@ -12,7 +10,7 @@ ExecReload=/bin/kill -TSTP $MAINPID
|
|
12
10
|
ExecStop=/bin/kill -TERM $MAINPID
|
13
11
|
<%="StandardOutput=append:#{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) %>
|
14
12
|
<%="StandardError=append:#{fetch(:sidekiq_error_log)}" if fetch(:sidekiq_error_log) %>
|
15
|
-
<%="User=#{fetch(:sidekiq_user)}" if fetch(:sidekiq_user) %>
|
13
|
+
<%="User=#{fetch(:sidekiq_user)}" if (fetch(:sidekiq_user) && (fetch(:puma_systemctl_user) == :system)) %>
|
16
14
|
<%="EnvironmentFile=#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
|
17
15
|
<% fetch(:sidekiq_service_unit_env_vars, []).each do |environment_variable| %>
|
18
16
|
<%="Environment=#{environment_variable}" %>
|
@@ -27,4 +25,6 @@ Restart=on-failure
|
|
27
25
|
SyslogIdentifier=sidekiq_<%= fetch(:application) %>_<%= fetch(:stage) %>
|
28
26
|
|
29
27
|
[Install]
|
30
|
-
WantedBy
|
28
|
+
WantedBy=<%=(fetch(:sidekiq_systemctl_user) == :system) ? "multi-user.target" : "default.target"%>
|
29
|
+
|
30
|
+
<% # Adapted from: https://github.com/seuros/capistrano-sidekiq/blob/master/lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb %>
|
@@ -1,4 +1,4 @@
|
|
1
1
|
check process <%= fetch(:sidekiq_service_unit_name) %> matching "sidekiq.*<%= fetch(:full_app_name) %>"
|
2
|
-
start program = "/usr/bin/systemctl start <%= fetch(:sidekiq_service_unit_name) %>"
|
3
|
-
stop program = "/usr/bin/systemctl stop <%= fetch(:sidekiq_service_unit_name) %>"
|
2
|
+
start program = "/bin/bash -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) /usr/bin/systemctl start --user <%= fetch(:sidekiq_service_unit_name) %>'" as uid "<%= fetch(:sidekiq_systemctl_user) %>" and gid "<%= fetch(:sidekiq_systemctl_user) %>"
|
3
|
+
stop program = "/bin/bash -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) /usr/bin/systemctl stop --user <%= fetch(:sidekiq_service_unit_name) %>'" as uid "<%= fetch(:sidekiq_systemctl_user) %>" and gid "<%= fetch(:sidekiq_systemctl_user) %>"
|
4
4
|
group <%= fetch(:sidekiq_monit_group) || fetch(:full_app_name) %>-sidekiq
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-cookbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Dixon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 5.0.4
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: capistrano-sidekiq
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,6 +88,7 @@ extensions: []
|
|
74
88
|
extra_rdoc_files: []
|
75
89
|
files:
|
76
90
|
- ".gitignore"
|
91
|
+
- CHANGELOG.md
|
77
92
|
- Gemfile
|
78
93
|
- LICENSE.txt
|
79
94
|
- README.md
|
@@ -86,23 +101,25 @@ files:
|
|
86
101
|
- lib/capistrano/cookbook/compile_assets_locally.rb
|
87
102
|
- lib/capistrano/cookbook/create_database.rb
|
88
103
|
- lib/capistrano/cookbook/helpers/setup_config_values.rb
|
104
|
+
- lib/capistrano/cookbook/helpers/smart_template.rb
|
89
105
|
- lib/capistrano/cookbook/helpers/substitute_strings.rb
|
90
|
-
- lib/capistrano/cookbook/helpers/template.rb
|
91
106
|
- lib/capistrano/cookbook/logs.rb
|
92
107
|
- lib/capistrano/cookbook/monit.rb
|
93
108
|
- lib/capistrano/cookbook/nginx.rb
|
109
|
+
- lib/capistrano/cookbook/puma_systemd.rb
|
94
110
|
- lib/capistrano/cookbook/run_tests.rb
|
95
111
|
- lib/capistrano/cookbook/setup_config.rb
|
96
|
-
- lib/capistrano/cookbook/
|
112
|
+
- lib/capistrano/cookbook/sidekiq_systemd.rb
|
97
113
|
- lib/capistrano/cookbook/tasks/check_revision.cap
|
98
114
|
- lib/capistrano/cookbook/tasks/compile_assets_locally.cap
|
99
115
|
- lib/capistrano/cookbook/tasks/create_database.cap
|
100
116
|
- lib/capistrano/cookbook/tasks/logs.cap
|
101
117
|
- lib/capistrano/cookbook/tasks/monit.cap
|
102
118
|
- lib/capistrano/cookbook/tasks/nginx.cap
|
119
|
+
- lib/capistrano/cookbook/tasks/puma_systemd.cap
|
103
120
|
- lib/capistrano/cookbook/tasks/run_tests.cap
|
104
121
|
- lib/capistrano/cookbook/tasks/setup_config.cap
|
105
|
-
- lib/capistrano/cookbook/tasks/
|
122
|
+
- lib/capistrano/cookbook/tasks/sidekiq_systemd.cap
|
106
123
|
- lib/capistrano/cookbook/templates/database.example.yml.erb
|
107
124
|
- lib/capistrano/cookbook/templates/log_rotation.erb
|
108
125
|
- lib/capistrano/cookbook/templates/sidekiq.yml.erb
|
@@ -1 +0,0 @@
|
|
1
|
-
load File.expand_path("tasks/systemd.cap", File.dirname(__FILE__))
|