deploify 0.2.5
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/.gitignore +18 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +36 -0
- data/LICENSE.txt +22 -0
- data/README.md +2 -0
- data/Rakefile +1 -0
- data/deploify.gemspec +29 -0
- data/lib/deploify/capistrano_extensions.rb +189 -0
- data/lib/deploify/recipes/deploify.rb +171 -0
- data/lib/deploify/recipes/mongodb.rb +15 -0
- data/lib/deploify/recipes/monit.rb +84 -0
- data/lib/deploify/recipes/mysql.rb +85 -0
- data/lib/deploify/recipes/nginx.rb +122 -0
- data/lib/deploify/recipes/passenger.rb +130 -0
- data/lib/deploify/recipes/puma.rb +15 -0
- data/lib/deploify/recipes/rails.rb +221 -0
- data/lib/deploify/recipes/thin.rb +104 -0
- data/lib/deploify/recipes.rb +13 -0
- data/lib/deploify/templates/monit/monit.conf.erb +5 -0
- data/lib/deploify/templates/nginx/logrotate.conf.erb +12 -0
- data/lib/deploify/templates/nginx/vhost_http_force_ssl.conf.erb +79 -0
- data/lib/deploify/templates/nginx/vhost_http_only.conf.erb +66 -0
- data/lib/deploify/templates/nginx/vhost_http_with_ssl.conf.erb +131 -0
- data/lib/deploify/templates/passenger/logrotate.conf.erb +12 -0
- data/lib/deploify/templates/passenger/passengerctl-lib.erb +68 -0
- data/lib/deploify/templates/passenger/passengerctl.erb +10 -0
- data/lib/deploify/templates/thin/logrotate.conf.erb +0 -0
- data/lib/deploify/templates/thin/thinctl-lib.erb +84 -0
- data/lib/deploify/templates/thin/thinctl.erb +9 -0
- data/lib/deploify/version.rb +12 -0
- data/lib/deploify.rb +7 -0
- data/lib/plugins/all.rb +20 -0
- data/lib/plugins/apt.rb +94 -0
- data/lib/plugins/std.rb +203 -0
- metadata +196 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
upstream <%= nginx_upstream_name %> {
|
2
|
+
<% nginx_upstream_servers.each do |srv| -%>
|
3
|
+
server <%= srv %>;
|
4
|
+
<% end -%>
|
5
|
+
}
|
6
|
+
|
7
|
+
server {
|
8
|
+
listen <%= nginx_vhost_listen_ip %>:80;
|
9
|
+
server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
|
10
|
+
|
11
|
+
location / {
|
12
|
+
rewrite ^ https://<%= domain %>$request_uri? permanent;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
server {
|
17
|
+
listen <%= nginx_vhost_listen_ip %>:443;
|
18
|
+
server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
|
19
|
+
root <%= deploy_to %>/current/public;
|
20
|
+
client_max_body_size <%= nginx_client_max_body_size %>;
|
21
|
+
access_log <%= shared_path %>/log/access.log;
|
22
|
+
error_log <%= shared_path %>/log/error.log;
|
23
|
+
|
24
|
+
ssl on;
|
25
|
+
ssl_certificate <%= deploy_to %>/nginx/<%= rails_env %>.crt;
|
26
|
+
ssl_certificate_key <%= deploy_to %>/nginx/<%= rails_env %>.key;
|
27
|
+
|
28
|
+
<% if force_domain_with_www -%>
|
29
|
+
if ($host !~* ^www.<%= domain %>$) {
|
30
|
+
rewrite ^(.*) https://www.<%= domain %>$1 permanent;
|
31
|
+
}
|
32
|
+
<% end -%>
|
33
|
+
|
34
|
+
location / {
|
35
|
+
<% if nginx_secured_site -%>
|
36
|
+
auth_basic "Limited access";
|
37
|
+
auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
|
38
|
+
<% end -%>
|
39
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
40
|
+
proxy_redirect off;
|
41
|
+
proxy_set_header Host $host;
|
42
|
+
proxy_set_header X-Real-IP $remote_addr;
|
43
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
44
|
+
proxy_set_header X-Forwarded-Proto https;
|
45
|
+
}
|
46
|
+
|
47
|
+
# This allows people to use images and css in their maintenance.html file
|
48
|
+
if ($request_filename ~* \.(css|jpg|gif|png)$) {
|
49
|
+
break;
|
50
|
+
}
|
51
|
+
|
52
|
+
# Rewrite all the requests to the maintenance.html page if it exists.
|
53
|
+
if (-f $document_root/system/maintenance.html) {
|
54
|
+
return 503;
|
55
|
+
}
|
56
|
+
|
57
|
+
# set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
|
58
|
+
location ~ ^/(images|javascripts|stylesheets)/ {
|
59
|
+
expires max;
|
60
|
+
error_page 404 = @fallback;
|
61
|
+
}
|
62
|
+
|
63
|
+
location @fallback {
|
64
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
65
|
+
proxy_redirect off;
|
66
|
+
proxy_set_header Host $host;
|
67
|
+
proxy_set_header X-Real-IP $remote_addr;
|
68
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
69
|
+
proxy_set_header X-Forwarded-Proto https;
|
70
|
+
}
|
71
|
+
|
72
|
+
error_page 404 /404.html;
|
73
|
+
error_page 500 502 504 /500.html;
|
74
|
+
|
75
|
+
error_page 503 @503;
|
76
|
+
location @503 {
|
77
|
+
rewrite ^(.*)$ /system/maintenance.html break;
|
78
|
+
}
|
79
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
upstream <%= nginx_upstream_name %> {
|
2
|
+
<% nginx_upstream_servers.each do |srv| -%>
|
3
|
+
server <%= srv %>;
|
4
|
+
<% end -%>
|
5
|
+
}
|
6
|
+
|
7
|
+
server {
|
8
|
+
listen <%= nginx_vhost_listen_ip %>:80;
|
9
|
+
server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
|
10
|
+
root <%= deploy_to %>/current/public;
|
11
|
+
client_max_body_size <%= nginx_client_max_body_size %>;
|
12
|
+
access_log <%= shared_path %>/log/access.log;
|
13
|
+
error_log <%= shared_path %>/log/error.log;
|
14
|
+
|
15
|
+
<% if force_domain_with_www -%>
|
16
|
+
if ($host !~* ^www.<%= domain %>$) {
|
17
|
+
rewrite ^(.*) http://www.<%= domain %>$1 permanent;
|
18
|
+
}
|
19
|
+
<% end -%>
|
20
|
+
|
21
|
+
location / {
|
22
|
+
<% if nginx_secured_site -%>
|
23
|
+
auth_basic "Limited access";
|
24
|
+
auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
|
25
|
+
<% end -%>
|
26
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
27
|
+
proxy_redirect off;
|
28
|
+
proxy_set_header Host $host;
|
29
|
+
proxy_set_header X-Real-IP $remote_addr;
|
30
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
31
|
+
proxy_set_header X-Forwarded-Proto http;
|
32
|
+
}
|
33
|
+
|
34
|
+
# This allows people to use images and css in their maintenance.html file
|
35
|
+
if ($request_filename ~* \.(css|jpg|gif|png)$) {
|
36
|
+
break;
|
37
|
+
}
|
38
|
+
|
39
|
+
# Rewrite all the requests to the maintenance.html page if it exists.
|
40
|
+
if (-f $document_root/system/maintenance.html) {
|
41
|
+
return 503;
|
42
|
+
}
|
43
|
+
|
44
|
+
# set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
|
45
|
+
location ~ ^/(images|javascripts|stylesheets)/ {
|
46
|
+
expires max;
|
47
|
+
error_page 404 = @fallback;
|
48
|
+
}
|
49
|
+
|
50
|
+
location @fallback {
|
51
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
52
|
+
proxy_redirect off;
|
53
|
+
proxy_set_header Host $host;
|
54
|
+
proxy_set_header X-Real-IP $remote_addr;
|
55
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
56
|
+
proxy_set_header X-Forwarded-Proto http;
|
57
|
+
}
|
58
|
+
|
59
|
+
error_page 404 /404.html;
|
60
|
+
error_page 500 502 504 /500.html;
|
61
|
+
|
62
|
+
error_page 503 @503;
|
63
|
+
location @503 {
|
64
|
+
rewrite ^(.*)$ /system/maintenance.html break;
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
upstream <%= nginx_upstream_name %> {
|
2
|
+
<% nginx_upstream_servers.each do |srv| -%>
|
3
|
+
server <%= srv %>;
|
4
|
+
<% end -%>
|
5
|
+
}
|
6
|
+
|
7
|
+
server {
|
8
|
+
listen <%= nginx_vhost_listen_ip %>:80;
|
9
|
+
server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
|
10
|
+
root <%= deploy_to %>/current/public;
|
11
|
+
client_max_body_size <%= nginx_client_max_body_size %>;
|
12
|
+
access_log <%= shared_path %>/log/access.log;
|
13
|
+
error_log <%= shared_path %>/log/error.log;
|
14
|
+
|
15
|
+
<% if force_domain_with_www -%>
|
16
|
+
if ($host !~* ^www.<%= domain %>$) {
|
17
|
+
rewrite ^(.*) http://www.<%= domain %>$1 permanent;
|
18
|
+
}
|
19
|
+
<% end -%>
|
20
|
+
|
21
|
+
location / {
|
22
|
+
<% if nginx_secured_site -%>
|
23
|
+
auth_basic "Limited access";
|
24
|
+
auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
|
25
|
+
<% end -%>
|
26
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
27
|
+
proxy_redirect off;
|
28
|
+
proxy_set_header Host $host;
|
29
|
+
proxy_set_header X-Real-IP $remote_addr;
|
30
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
31
|
+
proxy_set_header X-Forwarded-Proto http;
|
32
|
+
}
|
33
|
+
|
34
|
+
# This allows people to use images and css in their maintenance.html file
|
35
|
+
if ($request_filename ~* \.(css|jpg|gif|png)$) {
|
36
|
+
break;
|
37
|
+
}
|
38
|
+
|
39
|
+
# Rewrite all the requests to the maintenance.html page if it exists.
|
40
|
+
if (-f $document_root/system/maintenance.html) {
|
41
|
+
return 503;
|
42
|
+
}
|
43
|
+
|
44
|
+
# set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
|
45
|
+
location ~ ^/(images|javascripts|stylesheets)/ {
|
46
|
+
expires max;
|
47
|
+
error_page 404 = @fallback;
|
48
|
+
}
|
49
|
+
|
50
|
+
location @fallback {
|
51
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
52
|
+
proxy_redirect off;
|
53
|
+
proxy_set_header Host $host;
|
54
|
+
proxy_set_header X-Real-IP $remote_addr;
|
55
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
56
|
+
proxy_set_header X-Forwarded-Proto http;
|
57
|
+
}
|
58
|
+
|
59
|
+
error_page 404 /404.html;
|
60
|
+
error_page 500 502 504 /500.html;
|
61
|
+
|
62
|
+
error_page 503 @503;
|
63
|
+
location @503 {
|
64
|
+
rewrite ^(.*)$ /system/maintenance.html break;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
server {
|
69
|
+
listen <%= nginx_vhost_listen_ip %>:443;
|
70
|
+
server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
|
71
|
+
root <%= deploy_to %>/current/public;
|
72
|
+
client_max_body_size <%= nginx_client_max_body_size %>;
|
73
|
+
access_log <%= shared_path %>/log/access.log;
|
74
|
+
error_log <%= shared_path %>/log/error.log;
|
75
|
+
|
76
|
+
ssl on;
|
77
|
+
ssl_certificate <%= deploy_to %>/nginx/<%= rails_env %>.crt;
|
78
|
+
ssl_certificate_key <%= deploy_to %>/nginx/<%= rails_env %>.key;
|
79
|
+
|
80
|
+
<% if force_domain_with_www -%>
|
81
|
+
if ($host !~* ^www.<%= domain %>$) {
|
82
|
+
rewrite ^(.*) https://www.<%= domain %>$1 permanent;
|
83
|
+
}
|
84
|
+
<% end -%>
|
85
|
+
|
86
|
+
location / {
|
87
|
+
<% if nginx_secured_site -%>
|
88
|
+
auth_basic "Limited access";
|
89
|
+
auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
|
90
|
+
<% end -%>
|
91
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
92
|
+
proxy_redirect off;
|
93
|
+
proxy_set_header Host $host;
|
94
|
+
proxy_set_header X-Real-IP $remote_addr;
|
95
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
96
|
+
proxy_set_header X-Forwarded-Proto https;
|
97
|
+
}
|
98
|
+
|
99
|
+
# This allows people to use images and css in their maintenance.html file
|
100
|
+
if ($request_filename ~* \.(css|jpg|gif|png)$) {
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
|
104
|
+
# Rewrite all the requests to the maintenance.html page if it exists.
|
105
|
+
if (-f $document_root/system/maintenance.html) {
|
106
|
+
return 503;
|
107
|
+
}
|
108
|
+
|
109
|
+
# set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
|
110
|
+
location ~ ^/(images|javascripts|stylesheets)/ {
|
111
|
+
expires max;
|
112
|
+
error_page 404 = @fallback;
|
113
|
+
}
|
114
|
+
|
115
|
+
location @fallback {
|
116
|
+
proxy_pass http://<%= nginx_upstream_name %>;
|
117
|
+
proxy_redirect off;
|
118
|
+
proxy_set_header Host $host;
|
119
|
+
proxy_set_header X-Real-IP $remote_addr;
|
120
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
121
|
+
proxy_set_header X-Forwarded-Proto https;
|
122
|
+
}
|
123
|
+
|
124
|
+
error_page 404 /404.html;
|
125
|
+
error_page 500 502 504 /500.html;
|
126
|
+
|
127
|
+
error_page 503 @503;
|
128
|
+
location @503 {
|
129
|
+
rewrite ^(.*)$ /system/maintenance.html break;
|
130
|
+
}
|
131
|
+
}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
USER=app_${APPLICATION}
|
2
|
+
APP_DIR=/var/www/${APPLICATION}/current
|
3
|
+
PIDFILE=${APP_DIR}/tmp/pids/passenger.pid
|
4
|
+
LOGFILE=${APP_DIR}/log/passenger.log
|
5
|
+
|
6
|
+
if [ "$APP_PORT" = "" ]; then
|
7
|
+
CMD_START="cd $APP_DIR; rvm use $RVM_RUBY; passenger start $APP_DIR --socket ${APP_DIR}/tmp/pids/passenger.sock -e $ENVIRONMENT --min-instances=$INSTANCES_MIN --max-pool-size=$INSTANCES_MAX --pid-file $PIDFILE --log-file $LOGFILE -d"
|
8
|
+
CMD_STOP="cd $APP_DIR; rvm use $RVM_RUBY; passenger stop $APP_DIR --pid-file $PIDFILE"
|
9
|
+
else
|
10
|
+
CMD_START="cd $APP_DIR; rvm use $RVM_RUBY; passenger start $APP_DIR --port $APP_PORT -e $ENVIRONMENT --min-instances=$INSTANCES_MIN --max-pool-size=$INSTANCES_MAX --pid-file $PIDFILE --log-file $LOGFILE -d"
|
11
|
+
CMD_STOP="cd $APP_DIR; rvm use $RVM_RUBY; passenger stop $APP_DIR --pid-file $PIDFILE"
|
12
|
+
fi
|
13
|
+
|
14
|
+
function start() {
|
15
|
+
echo "Starting passenger for application '${APPLICATION}'"
|
16
|
+
if [ -f ${PIDFILE} ]; then
|
17
|
+
kill -0 `cat ${PIDFILE}`
|
18
|
+
if [ "$?" == "1" ]; then
|
19
|
+
rm ${APP_DIR}/tmp/pids/passenger.*
|
20
|
+
else
|
21
|
+
echo "Passenger already running with PID "`cat ${PIDFILE}`
|
22
|
+
return 1
|
23
|
+
fi
|
24
|
+
fi
|
25
|
+
su - $USER -c "$CMD_START"
|
26
|
+
}
|
27
|
+
|
28
|
+
function stop() {
|
29
|
+
echo "Stopping passenger for application '${APPLICATION}'"
|
30
|
+
su - $USER -c "$CMD_STOP"
|
31
|
+
}
|
32
|
+
|
33
|
+
function graceful() {
|
34
|
+
echo "Graceful (if possible) restart for application '${APPLICATION}'"
|
35
|
+
if [ -f ${PIDFILE} ]; then
|
36
|
+
kill -0 `cat ${PIDFILE}`
|
37
|
+
if [ "$?" == "0" ]; then
|
38
|
+
echo "Graceful restart for application '${APPLICATION}'"
|
39
|
+
touch ${APP_DIR}/tmp/restart.txt
|
40
|
+
return 0
|
41
|
+
else
|
42
|
+
echo "Oops! Pid File exists, but not workers. Restarting."
|
43
|
+
start
|
44
|
+
fi
|
45
|
+
else
|
46
|
+
start
|
47
|
+
fi
|
48
|
+
}
|
49
|
+
|
50
|
+
case "$1" in
|
51
|
+
"start")
|
52
|
+
start
|
53
|
+
;;
|
54
|
+
"stop")
|
55
|
+
stop
|
56
|
+
;;
|
57
|
+
"restart")
|
58
|
+
stop
|
59
|
+
start
|
60
|
+
;;
|
61
|
+
"graceful")
|
62
|
+
graceful
|
63
|
+
;;
|
64
|
+
*)
|
65
|
+
echo "Usage: $0 start|stop|restart|graceful" >&2
|
66
|
+
exit 3
|
67
|
+
;;
|
68
|
+
esac
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
APPLICATION=<%= application %>
|
4
|
+
APP_PORT=<%= passenger_port %>
|
5
|
+
RVM_RUBY=<%= rvm_ruby_string %>
|
6
|
+
ENVIRONMENT=<%= rails_env %>
|
7
|
+
INSTANCES_MIN=<%= passenger_min_instances %>
|
8
|
+
INSTANCES_MAX=<%= passenger_max_pool_size %>
|
9
|
+
|
10
|
+
source /usr/local/lib/passengerctl $1
|
File without changes
|
@@ -0,0 +1,84 @@
|
|
1
|
+
USER=app_${APPLICATION}
|
2
|
+
APP_DIR=<%= thin_applications_dir %>/${APPLICATION}/current
|
3
|
+
|
4
|
+
if [ "${APP_PORT}" = "" ]; then
|
5
|
+
CMD_START="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin start -s ${THIN_SERVERS} -S tmp/pids/thin.sock -e ${ENVIRONMENT} --stats /thin-status -d"
|
6
|
+
CMD_RESTART="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin restart -s ${THIN_SERVERS} -S tmp/pids/thin.sock -e ${ENVIRONMENT} --stats /thin-status -d"
|
7
|
+
else
|
8
|
+
CMD_START="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin start -s ${THIN_SERVERS} -p ${APP_PORT} -e ${ENVIRONMENT} --stats /thin-status -d"
|
9
|
+
CMD_RESTART="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin restart -s ${THIN_SERVERS} -p ${APP_PORT} -e ${ENVIRONMENT} --stats /thin-status -d"
|
10
|
+
fi
|
11
|
+
|
12
|
+
function running_servers() {
|
13
|
+
return `ls -1 ${APP_DIR}/tmp/pids/thin.*.pid | wc -l`
|
14
|
+
}
|
15
|
+
|
16
|
+
function start() {
|
17
|
+
echo "Starting thin cluster for application '${APPLICATION}'"
|
18
|
+
# if [ -f ${PIDFILE} ]; then
|
19
|
+
# kill -0 `cat ${PIDFILE}`
|
20
|
+
# if [ "$?" == "1" ]; then
|
21
|
+
# rm ${APP_DIR}/tmp/pids/thin.*
|
22
|
+
# else
|
23
|
+
# echo "Thin cluster already running with PID "`cat ${PIDFILE}`
|
24
|
+
# return 1
|
25
|
+
# fi
|
26
|
+
# fi
|
27
|
+
su - $USER -c "${CMD_START}"
|
28
|
+
}
|
29
|
+
|
30
|
+
function stop() {
|
31
|
+
echo "Stopping thin cluster for application '${APPLICATION}'"
|
32
|
+
if [ "${APP_PORT}" == '' ]; then
|
33
|
+
running_servers
|
34
|
+
CMD_STOP="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin stop -s $? -S tmp/pids/thin.sock"
|
35
|
+
else
|
36
|
+
running_servers
|
37
|
+
CMD_STOP="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin stop -s $? -p ${APP_PORT}"
|
38
|
+
fi
|
39
|
+
su - $USER -c "${CMD_STOP}"
|
40
|
+
}
|
41
|
+
|
42
|
+
function restart() {
|
43
|
+
echo "Restarting thin cluster for application '${APPLICATION}'"
|
44
|
+
running_servers
|
45
|
+
if [ ${THIN_SERVERS} -eq $? ]; then
|
46
|
+
echo "RESTART"
|
47
|
+
echo ${CMD_RESTART}
|
48
|
+
su - $USER -c "${CMD_RESTART}"
|
49
|
+
else
|
50
|
+
echo "STOP/START"
|
51
|
+
stop
|
52
|
+
start
|
53
|
+
fi
|
54
|
+
}
|
55
|
+
|
56
|
+
function graceful() {
|
57
|
+
echo "Restarting thin cluster for application '${APPLICATION}' with one-by-one option"
|
58
|
+
running_servers
|
59
|
+
if [ ${THIN_SERVERS} -eq $? ]; then
|
60
|
+
su - $USER -c "${CMD_RESTART} -O -w 20"
|
61
|
+
else
|
62
|
+
stop
|
63
|
+
start
|
64
|
+
fi
|
65
|
+
}
|
66
|
+
|
67
|
+
case "$1" in
|
68
|
+
"start")
|
69
|
+
start
|
70
|
+
;;
|
71
|
+
"stop")
|
72
|
+
stop
|
73
|
+
;;
|
74
|
+
"restart")
|
75
|
+
restart
|
76
|
+
;;
|
77
|
+
"graceful")
|
78
|
+
graceful
|
79
|
+
;;
|
80
|
+
*)
|
81
|
+
echo "Usage: $0 start|stop|restart|graceful" >&2
|
82
|
+
exit 3
|
83
|
+
;;
|
84
|
+
esac
|
data/lib/deploify.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
unless Capistrano::Configuration.respond_to?(:instance)
|
2
|
+
abort "Deploify requires Capistrano ~> 2.13.3"
|
3
|
+
end
|
4
|
+
|
5
|
+
require "#{File.dirname(__FILE__)}/deploify/capistrano_extensions"
|
6
|
+
require "#{File.dirname(__FILE__)}/plugins/all"
|
7
|
+
require "#{File.dirname(__FILE__)}/deploify/recipes"
|
data/lib/plugins/all.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# =all.rb: Load all the Capistrano Plugins in the directory.
|
2
|
+
#
|
3
|
+
# Require all other ruby files in the directory.
|
4
|
+
#
|
5
|
+
# ----
|
6
|
+
# Copyright (c) 2007 Neil Wilson, Aldur Systems Ltd
|
7
|
+
#
|
8
|
+
# Licensed under the GNU Public License v2. No warranty is provided.
|
9
|
+
# ----
|
10
|
+
# = Usage
|
11
|
+
#
|
12
|
+
# require 'vmbuilder_plugins/all'
|
13
|
+
|
14
|
+
# Splitting and joining __FILE__ deals with the current directory case
|
15
|
+
# properly
|
16
|
+
Dir[File.join( File.dirname(__FILE__), '*.rb')].each do |plugin_name|
|
17
|
+
unless plugin_name == File.join(File.dirname(__FILE__), File.basename(__FILE__))
|
18
|
+
require plugin_name
|
19
|
+
end
|
20
|
+
end
|
data/lib/plugins/apt.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# =apt.rb: Debian 'apt' Installer library
|
2
|
+
# Capistrano plugin module to install and manage apt packages
|
3
|
+
#
|
4
|
+
# ----
|
5
|
+
# Copyright (c) 2007 Neil Wilson, Aldur Systems Ltd
|
6
|
+
#
|
7
|
+
# Licensed under the GNU Public License v2. No warranty is provided.
|
8
|
+
|
9
|
+
require 'capistrano'
|
10
|
+
|
11
|
+
# = Purpose
|
12
|
+
# Apt is a Capistrano plugin module providing a set of methods
|
13
|
+
# that invoke the *apt* package manager (as used in Debian and Ubuntu)
|
14
|
+
#
|
15
|
+
# Installs within Capistrano as the plugin _apt_.
|
16
|
+
#
|
17
|
+
# =Usage
|
18
|
+
#
|
19
|
+
# require 'vmbuilder_plugins/apt'
|
20
|
+
#
|
21
|
+
# Prefix all calls to the library with <tt>apt.</tt>
|
22
|
+
#
|
23
|
+
module Apt
|
24
|
+
|
25
|
+
# Default apt-get command - reduces any interactivity to the minimum.
|
26
|
+
APT_GET="DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get"
|
27
|
+
|
28
|
+
# Run the apt install program across the package list in 'packages'.
|
29
|
+
# Select those packages referenced by <tt>:base</tt> and the +version+
|
30
|
+
# of the distribution you want to use.
|
31
|
+
def install(packages, version, options={})
|
32
|
+
update
|
33
|
+
special_options="--allow-unauthenticated" if version != :stable
|
34
|
+
send(run_method, %{
|
35
|
+
sh -c "#{APT_GET} -qyu --force-yes #{special_options.to_s} install #{package_list(packages, version)}"
|
36
|
+
}, options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Run an apt clean
|
40
|
+
def clean(options={})
|
41
|
+
send(run_method, %{sh -c "#{APT_GET} -qy clean"}, options)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Run an apt autoclean
|
45
|
+
def autoclean(options={})
|
46
|
+
send(run_method, %{sh -c "#{APT_GET} -qy autoclean"}, options)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Run an apt distribution upgrade
|
50
|
+
def dist_upgrade(options={})
|
51
|
+
update
|
52
|
+
send(run_method, %{sh -c "#{APT_GET} -qy dist-upgrade"}, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Run an apt upgrade. Use dist_upgrade instead if you want to upgrade
|
56
|
+
# the critical base packages.
|
57
|
+
def upgrade(options={})
|
58
|
+
update
|
59
|
+
send(run_method, %{sh -c "#{APT_GET} -qy upgrade"}, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Run an apt update.
|
63
|
+
def update(options={})
|
64
|
+
send(run_method, %{sh -c "#{APT_GET} -qy update"}, options)
|
65
|
+
end
|
66
|
+
|
67
|
+
# RPM package install via alien
|
68
|
+
def rpm_install(packages, options={})
|
69
|
+
install({:base => %w(wget alien) }, :base)
|
70
|
+
send(run_method, "wget -Ncq #{packages.join(' ')}", options)
|
71
|
+
files=packages.collect { |package| File.basename(package) }
|
72
|
+
send(run_method, "alien -i #{files.join(' ')}", options)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Clear the source list and package cache
|
76
|
+
def clear_cache(options={})
|
77
|
+
clean
|
78
|
+
cmd="rm -f /var/cache/apt/*.bin /var/lib/apt/lists/*_* /var/lib/apt/lists/partial/*"
|
79
|
+
send(run_method, cmd, options)
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
# Provides a string containing all the package names in the base
|
85
|
+
#list plus those in +version+.
|
86
|
+
def package_list(packages, version)
|
87
|
+
Array(packages[:base]).join(' ') + ' ' + Array(packages[version]).join(' ')
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
Capistrano.plugin :apt, Apt
|
93
|
+
|
94
|
+
# vim: nowrap sw=2 sts=2 ts=8 ff=unix ft=ruby:
|