teleporter 0.0.15 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/initial/capistrano.rb +7 -122
- data/lib/generators/initial/templates/capistrano/deploy/deploy.rb +100 -0
- data/lib/generators/initial/templates/capistrano/deploy/production.rb +19 -0
- data/lib/generators/initial/templates/capistrano/shared/monit.erb +7 -22
- data/lib/generators/initial/templates/capistrano/shared/nginx.conf.erb +8 -8
- data/lib/generators/initial/templates/capistrano/shared/puma.conf.erb +1 -0
- data/lib/generators/initial/templates/capistrano/shared/puma.erb +332 -0
- data/lib/generators/initial/templates/capistrano/shared/run-puma.erb +3 -0
- data/lib/generators/initial/templates/capistrano/shared/secrets.yml.erb +2 -0
- data/lib/generators/initial/templates/capistrano/tasks/setup_config.rake +30 -0
- data/lib/teleporter/version.rb +1 -1
- metadata +7 -4
- data/lib/generators/initial/templates/capistrano/lib/substitute_strings.rb +0 -12
- data/lib/generators/initial/templates/capistrano/lib/template.rb +0 -32
- data/lib/generators/initial/templates/capistrano/tasks/restart.rake +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dfe68013173039db4725ce3acac288a192e6f4e
|
4
|
+
data.tar.gz: 9e9a9957356c1403abf9700b0fb57482db2b6f9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9aefe47ec8ef2b5a66a115c3c33a7979e6165ba131ec65a15c5be6c9b14ee89dd08d504258e1b256b1aa947575bbaaa0c68da4143bf0225441d602daa75d20b
|
7
|
+
data.tar.gz: 8cde798b53c862ac12c1b2deba8ed0d593a07da6071eb20776478a99ce8e059272219af5b81b6f67b45fba40eadfb747b45b4395a53398597ad294a8e453b820
|
@@ -9,6 +9,7 @@ module Initial
|
|
9
9
|
gem 'capistrano-bundler'
|
10
10
|
gem 'capistrano-rails'
|
11
11
|
gem 'capistrano-sidekiq' , github: 'seuros/capistrano-sidekiq'
|
12
|
+
gem 'capistrano3-puma'
|
12
13
|
end
|
13
14
|
|
14
15
|
Bundler.with_clean_env do
|
@@ -18,9 +19,6 @@ module Initial
|
|
18
19
|
directory 'capistrano/tasks', 'lib/capistrano/tasks'
|
19
20
|
directory 'capistrano/shared', 'config/deploy/shared'
|
20
21
|
|
21
|
-
template "capistrano/lib/substitute_strings.rb", "lib/capistrano/substitute_strings.rb"
|
22
|
-
template "capistrano/lib/template.rb", "lib/capistrano/template.rb"
|
23
|
-
|
24
22
|
run 'cap install'
|
25
23
|
|
26
24
|
uncomment_lines 'Capfile', /require 'capistrano\/rbenv'/
|
@@ -29,127 +27,14 @@ module Initial
|
|
29
27
|
uncomment_lines 'Capfile', /require 'capistrano\/rails\/migrations'/
|
30
28
|
insert_into_file "Capfile", "require 'capistrano/sidekiq'\n",
|
31
29
|
after: "require 'capistrano/rails/migrations'\n"
|
30
|
+
insert_into_file "Capfile", "require 'capistrano/sidekiq'\n",
|
31
|
+
after: "require 'capistrano/puma'\n"
|
32
|
+
insert_into_file "Capfile", "require 'capistrano/sidekiq'\n",
|
33
|
+
after: "require 'capistrano/puma/monit'\n"
|
32
34
|
|
35
|
+
copy_file 'capistrano/deploy/deploy.rb', 'config/deploy.rb'
|
36
|
+
copy_file 'capistrano/deploy/production.rb', 'config/deploy/production.rb'
|
33
37
|
|
34
|
-
append_to_file 'config/deploy.rb' do
|
35
|
-
<<-EOT
|
36
|
-
set :rbenv_type, :system
|
37
|
-
set :rbenv_ruby, '2.1.2'
|
38
|
-
set :rbenv_prefix, "RBENV_ROOT=\#{fetch(:rbenv_path)} RBENV_VERSION=\#{fetch(:rbenv_ruby)} \#{fetch(:rbenv_path)}/bin/rbenv exec"
|
39
|
-
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
|
40
|
-
set :linked_files, %w{config/database.yml config/application.yml}
|
41
|
-
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
|
42
|
-
set(:config_files, %w(
|
43
|
-
nginx.conf
|
44
|
-
application.yml
|
45
|
-
database.example.yml
|
46
|
-
log_rotation
|
47
|
-
monit
|
48
|
-
monit_sidekiq
|
49
|
-
unicorn.rb
|
50
|
-
unicorn_init.sh
|
51
|
-
sidekiq_init.sh
|
52
|
-
))
|
53
|
-
set(:executable_config_files, %w(
|
54
|
-
unicorn_init.sh
|
55
|
-
sidekiq_init.sh
|
56
|
-
))
|
57
|
-
set(:symlinks, [
|
58
|
-
{
|
59
|
-
source: "nginx.conf",
|
60
|
-
link: "/etc/nginx/sites-enabled/{{full_app_name}}"
|
61
|
-
},
|
62
|
-
{
|
63
|
-
source: "unicorn_init.sh",
|
64
|
-
link: "/etc/init.d/unicorn_{{full_app_name}}"
|
65
|
-
},
|
66
|
-
{
|
67
|
-
source: "log_rotation",
|
68
|
-
link: "/etc/logrotate.d/{{full_app_name}}"
|
69
|
-
},
|
70
|
-
{
|
71
|
-
source: "monit",
|
72
|
-
link: "/etc/monit/conf.d/{{full_app_name}}.conf"
|
73
|
-
},
|
74
|
-
{
|
75
|
-
source: "monit_sidekiq",
|
76
|
-
link: "/etc/monit/conf.d/sidekiq_{{full_app_name}}.conf"
|
77
|
-
},
|
78
|
-
{
|
79
|
-
source: "sidekiq_init.sh",
|
80
|
-
link: "/etc/init.d/sidekiq_{{full_app_name}}"
|
81
|
-
}
|
82
|
-
])
|
83
|
-
namespace :deploy do
|
84
|
-
desc 'Normalize asset timestamps'
|
85
|
-
task migr: fetch(:stage) do
|
86
|
-
on roles(:app) do
|
87
|
-
within release_path do
|
88
|
-
execute :rake, "migrate:users", "RAILS_ENV=\#{fetch(:stage)}"
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
namespace :deploy do
|
95
|
-
task clear_cache: fetch(:stage) do
|
96
|
-
on roles(:app) do
|
97
|
-
within release_path do
|
98
|
-
execute :rake, 'tmp:cache:clear'
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
namespace :deploy do
|
105
|
-
# make sure we're deploying what we think we're deploying
|
106
|
-
before :deploy, "deploy:check_revision"
|
107
|
-
# only allow a deploy with passing tests to deployed
|
108
|
-
# compile assets locally then rsync
|
109
|
-
#after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
|
110
|
-
after :finishing, 'deploy:cleanup'
|
111
|
-
after :finishing, 'deploy:restart'
|
112
|
-
after :finishing, 'deploy:clear_cache'
|
113
|
-
#after :finishing, 'sidekiq:restart'
|
114
|
-
#after :finishing, 'deploy:migr'
|
115
|
-
end
|
116
|
-
|
117
|
-
EOT
|
118
|
-
end
|
119
|
-
|
120
|
-
append_to_file 'config/deploy/production.rb' do
|
121
|
-
<<-EOT
|
122
|
-
set :stage, :production
|
123
|
-
set :branch, "master"
|
124
|
-
|
125
|
-
# used in case we're deploying multiple versions of the same
|
126
|
-
# app side by side. Also provides quick sanity checks when looking
|
127
|
-
# at filepaths
|
128
|
-
set :full_app_name, "\#{fetch(:application)}_\#{fetch(:stage)}"
|
129
|
-
|
130
|
-
server '95.85.33.125', user: 'deploy', roles: %w{web app db}, primary: true
|
131
|
-
|
132
|
-
set :deploy_to, "/home/\#{fetch(:deploy_user)}/apps/\#{fetch(:full_app_name)}"
|
133
|
-
|
134
|
-
# dont try and infer something as important as environment from
|
135
|
-
# stage name.
|
136
|
-
set :rails_env, :production
|
137
|
-
|
138
|
-
# number of unicorn workers, this will be reflected in
|
139
|
-
# the unicorn.rb and the monit configs
|
140
|
-
set :unicorn_worker_count, 2
|
141
|
-
|
142
|
-
# whether we're using ssl or not, used for building nginx
|
143
|
-
# config file
|
144
|
-
set :enable_ssl, false
|
145
|
-
EOT
|
146
|
-
end
|
147
|
-
|
148
|
-
p '*****'
|
149
|
-
p 'config application name in config/deploy.rb'
|
150
|
-
p 'config git repo path in config/deploy.rb'
|
151
|
-
p 'remove default deploy:start task in config/deploy.rb'
|
152
|
-
p 'remove default examples in config/production/deploy.rb'
|
153
38
|
end
|
154
39
|
end
|
155
40
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
lock '3.2.1'
|
2
|
+
|
3
|
+
set :application, 'my_app_name'
|
4
|
+
set :repo_url, 'git@github.com:itsNikolay/puma-testing.git'
|
5
|
+
set :deploy_user, 'deploy'
|
6
|
+
|
7
|
+
set :puma_init_active_record, true
|
8
|
+
|
9
|
+
set :rbenv_type, :system
|
10
|
+
set :rbenv_ruby, '2.1.2'
|
11
|
+
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
|
12
|
+
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
|
13
|
+
set :linked_files, %w{config/database.yml config/application.yml config/secrets.yml}
|
14
|
+
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
|
15
|
+
set(:config_files, %w(
|
16
|
+
nginx.conf
|
17
|
+
application.yml
|
18
|
+
database.example.yml
|
19
|
+
log_rotation
|
20
|
+
monit
|
21
|
+
monit_sidekiq
|
22
|
+
puma.conf
|
23
|
+
puma
|
24
|
+
run-puma
|
25
|
+
sidekiq_init.sh
|
26
|
+
secrets.yml
|
27
|
+
))
|
28
|
+
set(:executable_config_files, %w(
|
29
|
+
puma
|
30
|
+
run-puma
|
31
|
+
sidekiq_init.sh
|
32
|
+
))
|
33
|
+
set(:symlinks, [
|
34
|
+
{
|
35
|
+
source: "nginx.conf",
|
36
|
+
link: "/etc/nginx/sites-enabled/{{full_app_name}}"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
source: "puma",
|
40
|
+
link: "/etc/init.d/puma"
|
41
|
+
},
|
42
|
+
{
|
43
|
+
source: "run-puma",
|
44
|
+
link: "/usr/local/bin/run-puma"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
source: "puma.conf",
|
48
|
+
link: "/etc/puma.conf"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
source: "log_rotation",
|
52
|
+
link: "/etc/logrotate.d/{{full_app_name}}"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
source: "monit",
|
56
|
+
link: "/etc/monit/conf.d/{{full_app_name}}.conf"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
source: "monit_sidekiq",
|
60
|
+
link: "/etc/monit/conf.d/sidekiq_{{full_app_name}}.conf"
|
61
|
+
},
|
62
|
+
{
|
63
|
+
source: "sidekiq_init.sh",
|
64
|
+
link: "/etc/init.d/sidekiq_{{full_app_name}}"
|
65
|
+
},
|
66
|
+
])
|
67
|
+
namespace :deploy do
|
68
|
+
desc 'Normalize asset timestamps'
|
69
|
+
task migr: fetch(:stage) do
|
70
|
+
on roles(:app) do
|
71
|
+
within release_path do
|
72
|
+
execute :rake, "migrate:users", "RAILS_ENV=#{fetch(:stage)}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :deploy do
|
79
|
+
task clear_cache: fetch(:stage) do
|
80
|
+
on roles(:app) do
|
81
|
+
within release_path do
|
82
|
+
execute :rake, 'tmp:cache:clear'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
namespace :deploy do
|
89
|
+
# make sure we're deploying what we think we're deploying
|
90
|
+
before :deploy, "deploy:check_revision"
|
91
|
+
# only allow a deploy with passing tests to deployed
|
92
|
+
# compile assets locally then rsync
|
93
|
+
#after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
|
94
|
+
after :finishing, 'deploy:cleanup'
|
95
|
+
after :finishing, 'deploy:restart'
|
96
|
+
after :finishing, 'deploy:clear_cache'
|
97
|
+
#after :finishing, 'sidekiq:restart'
|
98
|
+
#after :finishing, 'deploy:migr'
|
99
|
+
end
|
100
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
set :stage, :production
|
2
|
+
set :branch, "master"
|
3
|
+
|
4
|
+
# used in case we're deploying multiple versions of the same
|
5
|
+
# app side by side. Also provides quick sanity checks when looking
|
6
|
+
# at filepaths
|
7
|
+
set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
8
|
+
|
9
|
+
server '192.168.33.10', user: 'deploy', roles: %w{web app db}, primary: true
|
10
|
+
|
11
|
+
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:full_app_name)}"
|
12
|
+
|
13
|
+
# dont try and infer something as important as environment from
|
14
|
+
# stage name.
|
15
|
+
set :rails_env, :production
|
16
|
+
|
17
|
+
# whether we're using ssl or not, used for building nginx
|
18
|
+
# config file
|
19
|
+
set :enable_ssl, false
|
@@ -1,22 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
check process
|
5
|
-
with pidfile <%=
|
6
|
-
start program = "/
|
7
|
-
stop program = "/
|
8
|
-
if mem is greater than 300.0 MB for 1 cycles then restart # eating up memory?
|
9
|
-
if cpu is greater than 50% for 2 cycles then alert # send an email to admin
|
10
|
-
if cpu is greater than 80% for 30 cycles then restart # hung process?
|
11
|
-
group unicorn
|
12
|
-
|
13
|
-
<% (0..(fetch(:unicorn_worker_count) -1)).each do |worker| %>
|
14
|
-
check process unicorn_worker_<%= (5000 + worker).to_s %>
|
15
|
-
with pidfile <%= current_path %>/tmp/pids/unicorn.<%= (5000 + worker).to_s %>.pid
|
16
|
-
start program = "/bin/true"
|
17
|
-
stop program = "/etc/init.d/unicorn_<%= application %>_<%= fetch(:rails_env)%> kill_worker <%= (5000 + worker).to_s %>"
|
18
|
-
if mem is greater than 350.0 MB for 1 cycles then restart
|
19
|
-
if cpu is greater than 80% for 30 cycles then restart
|
20
|
-
|
21
|
-
group unicorn_workers
|
22
|
-
<% end %>
|
1
|
+
# Monit configuration for Puma
|
2
|
+
# Service name: <%= puma_monit_service_name %>
|
3
|
+
#
|
4
|
+
check process <%= puma_monit_service_name %>
|
5
|
+
with pidfile "<%= fetch(:puma_pid) %>"
|
6
|
+
start program = "/usr/bin/sudo -u <%= fetch(:deploy_user) %> /bin/bash -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:bundle] %> exec puma -C <%= fetch(:puma_conf) %> --daemon'"
|
7
|
+
stop program = "/usr/bin/sudo -u <%= fetch(:deploy_user) %> /bin/bash -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:bundle] %> exec pumactl -S <%= fetch(:puma_state) %> stop'"
|
@@ -1,5 +1,5 @@
|
|
1
|
-
upstream
|
2
|
-
server unix
|
1
|
+
upstream puma {
|
2
|
+
server unix:/<%= fetch(:deploy_to) %>/shared/tmp/sockets/puma.sock fail_timeout=0;
|
3
3
|
}
|
4
4
|
|
5
5
|
server {
|
@@ -12,12 +12,12 @@ server {
|
|
12
12
|
add_header Cache-Control public;
|
13
13
|
}
|
14
14
|
|
15
|
-
try_files $uri/index.html $uri @
|
16
|
-
location @
|
15
|
+
try_files $uri/index.html $uri @puma;
|
16
|
+
location @puma {
|
17
17
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
18
18
|
proxy_set_header Host $http_host;
|
19
19
|
proxy_redirect off;
|
20
|
-
proxy_pass http://
|
20
|
+
proxy_pass http://puma;
|
21
21
|
}
|
22
22
|
|
23
23
|
error_page 500 502 503 504 /500.html;
|
@@ -36,13 +36,13 @@ server {
|
|
36
36
|
add_header Cache-Control public;
|
37
37
|
}
|
38
38
|
|
39
|
-
try_files $uri/index.html $uri @
|
40
|
-
location @
|
39
|
+
try_files $uri/index.html $uri @puma;
|
40
|
+
location @puma {
|
41
41
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
42
42
|
proxy_set_header X-Forwarded-Proto https;
|
43
43
|
proxy_set_header Host $http_host;
|
44
44
|
proxy_redirect off;
|
45
|
-
proxy_pass http://
|
45
|
+
proxy_pass http://puma;
|
46
46
|
}
|
47
47
|
|
48
48
|
error_page 500 502 503 504 /500.html;
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= current_path %>,<%= fetch(:deploy_user) %>
|
@@ -0,0 +1,332 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
### BEGIN INIT INFO
|
3
|
+
# Provides: puma
|
4
|
+
# Required-Start: $remote_fs $syslog
|
5
|
+
# Required-Stop: $remote_fs $syslog
|
6
|
+
# Default-Start: 2 3 4 5
|
7
|
+
# Default-Stop: 0 1 6
|
8
|
+
# Short-Description: Example initscript
|
9
|
+
# Description: This file should be used to construct scripts to be
|
10
|
+
# placed in /etc/init.d.
|
11
|
+
### END INIT INFO
|
12
|
+
|
13
|
+
# Author: Darío Javier Cravero <dario@exordo.com>
|
14
|
+
#
|
15
|
+
# Do NOT "set -e"
|
16
|
+
|
17
|
+
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
18
|
+
PATH=/usr/local/bin:/usr/local/sbin/:/sbin:/usr/sbin:/bin:/usr/bin
|
19
|
+
DESC="Puma rack web server"
|
20
|
+
NAME=puma
|
21
|
+
DAEMON=$NAME
|
22
|
+
SCRIPTNAME=/etc/init.d/$NAME
|
23
|
+
CONFIG=/etc/puma.conf
|
24
|
+
JUNGLE=`cat $CONFIG`
|
25
|
+
RUNPUMA=/usr/local/bin/run-puma
|
26
|
+
|
27
|
+
# Load the VERBOSE setting and other rcS variables
|
28
|
+
. /lib/init/vars.sh
|
29
|
+
|
30
|
+
# Define LSB log_* functions.
|
31
|
+
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
32
|
+
. /lib/lsb/init-functions
|
33
|
+
|
34
|
+
#
|
35
|
+
# Function that starts the jungle
|
36
|
+
#
|
37
|
+
do_start() {
|
38
|
+
log_daemon_msg "=> Running the jungle..."
|
39
|
+
for i in $JUNGLE; do
|
40
|
+
dir=`echo $i | cut -d , -f 1`
|
41
|
+
user=`echo $i | cut -d , -f 2`
|
42
|
+
config_file=`echo $i | cut -d , -f 3`
|
43
|
+
if [ "$config_file" = "" ]; then
|
44
|
+
config_file="$dir/config/puma.rb"
|
45
|
+
fi
|
46
|
+
log_file=`echo $i | cut -d , -f 4`
|
47
|
+
if [ "$log_file" = "" ]; then
|
48
|
+
log_file="$dir/log/puma.log"
|
49
|
+
fi
|
50
|
+
do_start_one $dir $user $config_file $log_file
|
51
|
+
done
|
52
|
+
}
|
53
|
+
|
54
|
+
do_start_one() {
|
55
|
+
PIDFILE=$1/tmp/puma/pid
|
56
|
+
if [ -e $PIDFILE ]; then
|
57
|
+
PID=`cat $PIDFILE`
|
58
|
+
# If the puma isn't running, run it, otherwise restart it.
|
59
|
+
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
60
|
+
do_start_one_do $1 $2 $3 $4
|
61
|
+
else
|
62
|
+
do_restart_one $1
|
63
|
+
fi
|
64
|
+
else
|
65
|
+
do_start_one_do $1 $2 $3 $4
|
66
|
+
fi
|
67
|
+
}
|
68
|
+
|
69
|
+
do_start_one_do() {
|
70
|
+
log_daemon_msg "--> Woke up puma $1"
|
71
|
+
log_daemon_msg "user $2"
|
72
|
+
log_daemon_msg "log to $4"
|
73
|
+
start-stop-daemon --verbose --start --chdir $1 --chuid $2 --background --exec $RUNPUMA -- $1 $3 $4
|
74
|
+
}
|
75
|
+
|
76
|
+
#
|
77
|
+
# Function that stops the jungle
|
78
|
+
#
|
79
|
+
do_stop() {
|
80
|
+
log_daemon_msg "=> Putting all the beasts to bed..."
|
81
|
+
for i in $JUNGLE; do
|
82
|
+
dir=`echo $i | cut -d , -f 1`
|
83
|
+
do_stop_one $dir
|
84
|
+
done
|
85
|
+
}
|
86
|
+
#
|
87
|
+
# Function that stops the daemon/service
|
88
|
+
#
|
89
|
+
do_stop_one() {
|
90
|
+
log_daemon_msg "--> Stopping $1"
|
91
|
+
PIDFILE=$1/tmp/puma/pid
|
92
|
+
STATEFILE=$1/tmp/puma/state
|
93
|
+
if [ -e $PIDFILE ]; then
|
94
|
+
PID=`cat $PIDFILE`
|
95
|
+
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
96
|
+
log_daemon_msg "---> Puma $1 isn't running."
|
97
|
+
else
|
98
|
+
log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
|
99
|
+
pumactl --state $STATEFILE stop
|
100
|
+
# Many daemons don't delete their pidfiles when they exit.
|
101
|
+
rm -f $PIDFILE $STATEFILE
|
102
|
+
fi
|
103
|
+
else
|
104
|
+
log_daemon_msg "---> No puma here..."
|
105
|
+
fi
|
106
|
+
return 0
|
107
|
+
}
|
108
|
+
|
109
|
+
#
|
110
|
+
# Function that restarts the jungle
|
111
|
+
#
|
112
|
+
do_restart() {
|
113
|
+
for i in $JUNGLE; do
|
114
|
+
dir=`echo $i | cut -d , -f 1`
|
115
|
+
do_restart_one $dir
|
116
|
+
done
|
117
|
+
}
|
118
|
+
|
119
|
+
#
|
120
|
+
# Function that sends a SIGUSR2 to the daemon/service
|
121
|
+
#
|
122
|
+
do_restart_one() {
|
123
|
+
PIDFILE=$1/tmp/puma/pid
|
124
|
+
i=`grep $1 $CONFIG`
|
125
|
+
dir=`echo $i | cut -d , -f 1`
|
126
|
+
|
127
|
+
if [ -e $PIDFILE ]; then
|
128
|
+
log_daemon_msg "--> About to restart puma $1"
|
129
|
+
pumactl --state $dir/tmp/puma/state restart
|
130
|
+
# kill -s USR2 `cat $PIDFILE`
|
131
|
+
# TODO Check if process exist
|
132
|
+
else
|
133
|
+
log_daemon_msg "--> Your puma was never playing... Let's get it out there first"
|
134
|
+
user=`echo $i | cut -d , -f 2`
|
135
|
+
config_file=`echo $i | cut -d , -f 3`
|
136
|
+
if [ "$config_file" = "" ]; then
|
137
|
+
config_file="$dir/config/puma.rb"
|
138
|
+
fi
|
139
|
+
log_file=`echo $i | cut -d , -f 4`
|
140
|
+
if [ "$log_file" = "" ]; then
|
141
|
+
log_file="$dir/log/puma.log"
|
142
|
+
fi
|
143
|
+
do_start_one $dir $user $config_file $log_file
|
144
|
+
fi
|
145
|
+
return 0
|
146
|
+
}
|
147
|
+
|
148
|
+
#
|
149
|
+
# Function that statuss the jungle
|
150
|
+
#
|
151
|
+
do_status() {
|
152
|
+
for i in $JUNGLE; do
|
153
|
+
dir=`echo $i | cut -d , -f 1`
|
154
|
+
do_status_one $dir
|
155
|
+
done
|
156
|
+
}
|
157
|
+
|
158
|
+
#
|
159
|
+
# Function that sends a SIGUSR2 to the daemon/service
|
160
|
+
#
|
161
|
+
do_status_one() {
|
162
|
+
PIDFILE=$1/tmp/puma/pid
|
163
|
+
i=`grep $1 $CONFIG`
|
164
|
+
dir=`echo $i | cut -d , -f 1`
|
165
|
+
|
166
|
+
if [ -e $PIDFILE ]; then
|
167
|
+
log_daemon_msg "--> About to status puma $1"
|
168
|
+
pumactl --state $dir/tmp/puma/state stats
|
169
|
+
# kill -s USR2 `cat $PIDFILE`
|
170
|
+
# TODO Check if process exist
|
171
|
+
else
|
172
|
+
log_daemon_msg "--> $1 isn't there :(..."
|
173
|
+
fi
|
174
|
+
return 0
|
175
|
+
}
|
176
|
+
|
177
|
+
do_add() {
|
178
|
+
str=""
|
179
|
+
# App's directory
|
180
|
+
if [ -d "$1" ]; then
|
181
|
+
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
182
|
+
str=$1
|
183
|
+
else
|
184
|
+
echo "The app is already being managed. Remove it if you want to update its config."
|
185
|
+
exit 1
|
186
|
+
fi
|
187
|
+
else
|
188
|
+
echo "The directory $1 doesn't exist."
|
189
|
+
exit 1
|
190
|
+
fi
|
191
|
+
# User to run it as
|
192
|
+
if [ "`grep -c "^$2:" /etc/passwd`" -eq 0 ]; then
|
193
|
+
echo "The user $2 doesn't exist."
|
194
|
+
exit 1
|
195
|
+
else
|
196
|
+
str="$str,$2"
|
197
|
+
fi
|
198
|
+
# Config file
|
199
|
+
if [ "$3" != "" ]; then
|
200
|
+
if [ -e $3 ]; then
|
201
|
+
str="$str,$3"
|
202
|
+
else
|
203
|
+
echo "The config file $3 doesn't exist."
|
204
|
+
exit 1
|
205
|
+
fi
|
206
|
+
fi
|
207
|
+
# Log file
|
208
|
+
if [ "$4" != "" ]; then
|
209
|
+
str="$str,$4"
|
210
|
+
fi
|
211
|
+
|
212
|
+
# Add it to the jungle
|
213
|
+
echo $str >> $CONFIG
|
214
|
+
log_daemon_msg "Added a Puma to the jungle: $str. You still have to start it though."
|
215
|
+
}
|
216
|
+
|
217
|
+
do_remove() {
|
218
|
+
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
219
|
+
echo "There's no app $1 to remove."
|
220
|
+
else
|
221
|
+
# Stop it first.
|
222
|
+
do_stop_one $1
|
223
|
+
# Remove it from the config.
|
224
|
+
sed -i "\\:^$1:d" $CONFIG
|
225
|
+
log_daemon_msg "Removed a Puma from the jungle: $1."
|
226
|
+
fi
|
227
|
+
}
|
228
|
+
|
229
|
+
case "$1" in
|
230
|
+
start)
|
231
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
232
|
+
if [ "$#" -eq 1 ]; then
|
233
|
+
do_start
|
234
|
+
else
|
235
|
+
i=`grep $2 $CONFIG`
|
236
|
+
dir=`echo $i | cut -d , -f 1`
|
237
|
+
user=`echo $i | cut -d , -f 2`
|
238
|
+
config_file=`echo $i | cut -d , -f 3`
|
239
|
+
if [ "$config_file" = "" ]; then
|
240
|
+
config_file="$dir/config/puma.rb"
|
241
|
+
fi
|
242
|
+
log_file=`echo $i | cut -d , -f 4`
|
243
|
+
if [ "$log_file" = "" ]; then
|
244
|
+
log_file="$dir/log/puma.log"
|
245
|
+
fi
|
246
|
+
do_start_one $dir $user $config_file $log_file
|
247
|
+
fi
|
248
|
+
case "$?" in
|
249
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
250
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
251
|
+
esac
|
252
|
+
;;
|
253
|
+
stop)
|
254
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
255
|
+
if [ "$#" -eq 1 ]; then
|
256
|
+
do_stop
|
257
|
+
else
|
258
|
+
i=`grep $2 $CONFIG`
|
259
|
+
dir=`echo $i | cut -d , -f 1`
|
260
|
+
do_stop_one $dir
|
261
|
+
fi
|
262
|
+
case "$?" in
|
263
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
264
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
265
|
+
esac
|
266
|
+
;;
|
267
|
+
status)
|
268
|
+
# TODO Implement.
|
269
|
+
log_daemon_msg "Status $DESC" "$NAME"
|
270
|
+
if [ "$#" -eq 1 ]; then
|
271
|
+
do_status
|
272
|
+
else
|
273
|
+
i=`grep $2 $CONFIG`
|
274
|
+
dir=`echo $i | cut -d , -f 1`
|
275
|
+
do_status_one $dir
|
276
|
+
fi
|
277
|
+
case "$?" in
|
278
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
279
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
280
|
+
esac
|
281
|
+
;;
|
282
|
+
restart)
|
283
|
+
log_daemon_msg "Restarting $DESC" "$NAME"
|
284
|
+
if [ "$#" -eq 1 ]; then
|
285
|
+
do_restart
|
286
|
+
else
|
287
|
+
i=`grep $2 $CONFIG`
|
288
|
+
dir=`echo $i | cut -d , -f 1`
|
289
|
+
do_restart_one $dir
|
290
|
+
fi
|
291
|
+
case "$?" in
|
292
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
293
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
294
|
+
esac
|
295
|
+
;;
|
296
|
+
add)
|
297
|
+
if [ "$#" -lt 3 ]; then
|
298
|
+
echo "Please, specifiy the app's directory and the user that will run it at least."
|
299
|
+
echo " Usage: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
300
|
+
echo " config and log are optionals."
|
301
|
+
exit 1
|
302
|
+
else
|
303
|
+
do_add $2 $3 $4 $5
|
304
|
+
fi
|
305
|
+
case "$?" in
|
306
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
307
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
308
|
+
esac
|
309
|
+
;;
|
310
|
+
remove)
|
311
|
+
if [ "$#" -lt 2 ]; then
|
312
|
+
echo "Please, specifiy the app's directory to remove."
|
313
|
+
exit 1
|
314
|
+
else
|
315
|
+
do_remove $2
|
316
|
+
fi
|
317
|
+
case "$?" in
|
318
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
319
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
320
|
+
esac
|
321
|
+
;;
|
322
|
+
*)
|
323
|
+
echo "Usage:" >&2
|
324
|
+
echo " Run the jungle: $SCRIPTNAME {start|stop|status|restart}" >&2
|
325
|
+
echo " Add a Puma: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
326
|
+
echo " config and log are optionals."
|
327
|
+
echo " Remove a Puma: $SCRIPTNAME remove /path/to/app"
|
328
|
+
echo " On a Puma: $SCRIPTNAME {start|stop|status|restart} PUMA-NAME" >&2
|
329
|
+
exit 3
|
330
|
+
;;
|
331
|
+
esac
|
332
|
+
:
|
@@ -31,3 +31,33 @@ namespace :deploy do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
|
36
|
+
def smart_template(from, to=nil)
|
37
|
+
to ||= from
|
38
|
+
full_to_path = "#{shared_path}/config/#{to}"
|
39
|
+
if from_erb_path = template_file(from)
|
40
|
+
from_erb = StringIO.new(ERB.new(File.read(from_erb_path)).result(binding))
|
41
|
+
upload! from_erb, full_to_path
|
42
|
+
info "copying: #{from_erb} to: #{full_to_path}"
|
43
|
+
else
|
44
|
+
error "error #{from} not found"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def template_file(name)
|
49
|
+
if File.exist?((file = "config/deploy/#{fetch(:full_app_name)}/#{name}.erb"))
|
50
|
+
return file
|
51
|
+
elsif File.exist?((file = "config/deploy/shared/#{name}.erb"))
|
52
|
+
return file
|
53
|
+
end
|
54
|
+
return nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def sub_strings(input_string)
|
58
|
+
output_string = input_string
|
59
|
+
input_string.scan(/{{(\w*)}}/).each do |var|
|
60
|
+
output_string.gsub!("{{#{var[0]}}}", fetch(var[0].to_sym))
|
61
|
+
end
|
62
|
+
output_string
|
63
|
+
end
|
data/lib/teleporter/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teleporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ponomarev Nikolay
|
@@ -70,14 +70,18 @@ files:
|
|
70
70
|
- lib/generators/initial/gemfile.rb
|
71
71
|
- lib/generators/initial/rspec_base.rb
|
72
72
|
- lib/generators/initial/start.rb
|
73
|
-
- lib/generators/initial/templates/capistrano/
|
74
|
-
- lib/generators/initial/templates/capistrano/
|
73
|
+
- lib/generators/initial/templates/capistrano/deploy/deploy.rb
|
74
|
+
- lib/generators/initial/templates/capistrano/deploy/production.rb
|
75
75
|
- lib/generators/initial/templates/capistrano/shared/application.yml.erb
|
76
76
|
- lib/generators/initial/templates/capistrano/shared/database.example.yml.erb
|
77
77
|
- lib/generators/initial/templates/capistrano/shared/log_rotation.erb
|
78
78
|
- lib/generators/initial/templates/capistrano/shared/monit.erb
|
79
79
|
- lib/generators/initial/templates/capistrano/shared/monit_sidekiq.erb
|
80
80
|
- lib/generators/initial/templates/capistrano/shared/nginx.conf.erb
|
81
|
+
- lib/generators/initial/templates/capistrano/shared/puma.conf.erb
|
82
|
+
- lib/generators/initial/templates/capistrano/shared/puma.erb
|
83
|
+
- lib/generators/initial/templates/capistrano/shared/run-puma.erb
|
84
|
+
- lib/generators/initial/templates/capistrano/shared/secrets.yml.erb
|
81
85
|
- lib/generators/initial/templates/capistrano/shared/sidekiq.yml.erb
|
82
86
|
- lib/generators/initial/templates/capistrano/shared/sidekiq_init.sh.erb
|
83
87
|
- lib/generators/initial/templates/capistrano/shared/unicorn.rb.erb
|
@@ -85,7 +89,6 @@ files:
|
|
85
89
|
- lib/generators/initial/templates/capistrano/tasks/check_revision.rake
|
86
90
|
- lib/generators/initial/templates/capistrano/tasks/compile_assets_locally.rake
|
87
91
|
- lib/generators/initial/templates/capistrano/tasks/logs.rake
|
88
|
-
- lib/generators/initial/templates/capistrano/tasks/restart.rake
|
89
92
|
- lib/generators/initial/templates/capistrano/tasks/setup_config.rake
|
90
93
|
- lib/generators/initial/templates/rspec_base/configs/capybara.rb
|
91
94
|
- lib/generators/initial/templates/rspec_base/configs/database_cleaner.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# we often want to refer to variables which
|
2
|
-
# are defined in subsequent stage files. This
|
3
|
-
# let's us use the {{var}} to represent fetch(:var)
|
4
|
-
# in strings which are only evaluated at runtime.
|
5
|
-
|
6
|
-
def sub_strings(input_string)
|
7
|
-
output_string = input_string
|
8
|
-
input_string.scan(/{{(\w*)}}/).each do |var|
|
9
|
-
output_string.gsub!("{{#{var[0]}}}", fetch(var[0].to_sym))
|
10
|
-
end
|
11
|
-
output_string
|
12
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# will first try and copy the file:
|
2
|
-
# config/deploy/#{full_app_name}/#{from}.erb
|
3
|
-
# to:
|
4
|
-
# shared/config/to
|
5
|
-
# if the original source path doesn exist then it will
|
6
|
-
# search in:
|
7
|
-
# config/deploy/shared/#{from}.erb
|
8
|
-
# this allows files which are common to all enviros to
|
9
|
-
# come from a single source while allowing specific
|
10
|
-
# ones to be over-ridden
|
11
|
-
# if the target file name is the same as the source then
|
12
|
-
# the second parameter can be left out
|
13
|
-
def smart_template(from, to=nil)
|
14
|
-
to ||= from
|
15
|
-
full_to_path = "#{shared_path}/config/#{to}"
|
16
|
-
if from_erb_path = template_file(from)
|
17
|
-
from_erb = StringIO.new(ERB.new(File.read(from_erb_path)).result(binding))
|
18
|
-
upload! from_erb, full_to_path
|
19
|
-
info "copying: #{from_erb} to: #{full_to_path}"
|
20
|
-
else
|
21
|
-
error "error #{from} not found"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def template_file(name)
|
26
|
-
if File.exist?((file = "config/deploy/#{fetch(:full_app_name)}/#{name}.erb"))
|
27
|
-
return file
|
28
|
-
elsif File.exist?((file = "config/deploy/shared/#{name}.erb"))
|
29
|
-
return file
|
30
|
-
end
|
31
|
-
return nil
|
32
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
namespace :deploy do
|
2
|
-
desc 'Restart unicorn application'
|
3
|
-
%w(start stop force-stop kill_worker restart upgrage reopen-logs).each do |command|
|
4
|
-
task command.to_sym do
|
5
|
-
on roles(:app), in: :sequence, wait: 5 do
|
6
|
-
sudo "/etc/init.d/unicorn_#{fetch(:full_app_name)} #{command}"
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|