bosh-gen 0.8.2 → 0.9.0
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/ChangeLog.md +13 -0
- data/lib/bosh/gen/cli.rb +45 -29
- data/lib/bosh/gen/generators/deployment_manifest_generator.rb +7 -3
- data/lib/bosh/gen/generators/extract_job_generator.rb +37 -6
- data/lib/bosh/gen/generators/extract_package_generator.rb +23 -5
- data/lib/bosh/gen/generators/job_generator.rb +34 -16
- data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_nginx_rack/nginx_puma_migrate.yml +14 -0
- data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_nginx_rack/nginx_rackup.yml.tt +8 -0
- data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_simple/default.yml +2 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/monit.tt +13 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/%job_name%_rack_ctl.tt +59 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_db_utils.sh.erb +54 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_nginx.sh.erb +17 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_redis_utils.sh.erb +18 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_setup.sh.erb +48 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_start.sh.erb +59 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_utils.sh +148 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/monit_debugger +13 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/nginx_ctl.tt +41 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/rails_ctl_setup.sh.erb +40 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/database.yml.erb +17 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/mime.types +73 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/nginx.conf.erb +150 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/nginx_proxy.conf +11 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/redis.yml.erb +6 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/monit.tt +5 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/bin/%job_name%_ctl.tt +36 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/bin/monit_debugger +13 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/data/properties.sh.erb +10 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/helpers/ctl_setup.sh +81 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/helpers/ctl_utils.sh +156 -0
- data/lib/bosh/gen/generators/package_generator.rb +56 -10
- data/lib/bosh/gen/models.rb +1 -0
- data/lib/bosh/gen/models/bosh_config.rb +15 -0
- data/lib/bosh/gen/models/deployment_manifest.rb +5 -0
- data/lib/bosh/gen/version.rb +1 -1
- data/spec/fixtures/bosh_config/multiple_boshes.yml +34 -0
- data/spec/fixtures/deployment_manifests/2_jobs_1_ip_8196_disk.yml +2 -2
- data/spec/fixtures/deployment_manifests/2_jobs_2_ips_no_disk.yml +2 -2
- data/spec/generators/generator_spec_helper.rb +102 -0
- data/spec/generators/jobs/webapp_job_generator_spec.rb +68 -0
- data/spec/models/bosh_config_spec.rb +11 -0
- metadata +38 -8
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/monit.tt +0 -5
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/templates/%job_name%_ctl.tt +0 -62
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/monit.tt +0 -5
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/templates/%job_name%_ctl.tt +0 -64
@@ -0,0 +1,54 @@
|
|
1
|
+
<% if properties.postgres %>
|
2
|
+
PG_PACKAGE_DIR=/var/vcap/package/postgres
|
3
|
+
function database_ready() {
|
4
|
+
DB_HOST='<%= properties.postgres.host %>'
|
5
|
+
DB_PORT='<%= properties.postgres.port || 5432 %>'
|
6
|
+
DB_USER='<%= properties.postgres.user %>'
|
7
|
+
DB_PASSWORD='<%= properties.postgres.password %>'
|
8
|
+
DB_NAME='<%= properties.postgres.database %>'
|
9
|
+
echo Testing postgresl: psql -d $DB_NAME -p $DB_PORT -U vcap -c "select 1;"
|
10
|
+
LD_LIBRARY_PATH=$PG_PACKAGE_DIR/lib $PG_PACKAGE_DIR/bin/psql -d $DB_NAME -p $DB_PORT -U $DB_USER -c "select 1;"
|
11
|
+
}
|
12
|
+
<% else %>
|
13
|
+
# No database or SQLite database
|
14
|
+
function database_ready() {
|
15
|
+
true
|
16
|
+
}
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
function wait_for_database() {
|
20
|
+
while [[ ! database_ready ]]
|
21
|
+
do
|
22
|
+
echo "Waiting for database availability"
|
23
|
+
sleep 1;
|
24
|
+
done
|
25
|
+
}
|
26
|
+
|
27
|
+
# Look for known types of config files
|
28
|
+
# and if found, symlink into target location
|
29
|
+
# in application
|
30
|
+
#
|
31
|
+
# config/wp-config.php -> wp-config.php
|
32
|
+
# config/database.yml -> config/database.yml
|
33
|
+
function link_sql_db_config() {
|
34
|
+
possible_job_config=(config/database.yml config/wp-config.php)
|
35
|
+
target_app_config=(config/database.yml wp-config.php)
|
36
|
+
list_size=${#possible_job_config[@]}
|
37
|
+
found_config='none'
|
38
|
+
for (( i = 0; i < $list_size; i++ )); do
|
39
|
+
job_config=${possible_job_config[i]}
|
40
|
+
app_config=${target_app_config[i]}
|
41
|
+
if [[ -f $JOB_DIR/${job_config} ]]
|
42
|
+
then
|
43
|
+
link_job_file_to_package ${job_config} ${app_config}
|
44
|
+
found_config=${app_config}
|
45
|
+
fi
|
46
|
+
done
|
47
|
+
|
48
|
+
if [[ "${found_config}" = "none" ]]
|
49
|
+
then
|
50
|
+
echo "ERROR: link_sql_db_config - job does not contain a supported db config file"
|
51
|
+
echo "Please add to job $JOB_NAME a template from: ${possible_job_config[@]}"
|
52
|
+
exit 1
|
53
|
+
fi
|
54
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Setup HTTP_PROXY, HTTPS_PROXY, NO_PROXY as necessary
|
2
|
+
|
3
|
+
# https://github.com/pmirshad/cgit-on-nginx/wiki/Installing-cgit-with-nginx-on-Ubuntu-11.10
|
4
|
+
<% if properties.env %>
|
5
|
+
<% if properties.env.http_proxy %>
|
6
|
+
export HTTP_PROXY='<%= properties.env.http_proxy %>'
|
7
|
+
export http_proxy='<%= properties.env.http_proxy %>'
|
8
|
+
<% end %>
|
9
|
+
<% if properties.env.https_proxy %>
|
10
|
+
export HTTPS_PROXY='<%= properties.env.https_proxy %>'
|
11
|
+
export https_proxy='<%= properties.env.https_proxy %>'
|
12
|
+
<% end %>
|
13
|
+
<% if properties.env.no_proxy %>
|
14
|
+
export NO_PROXY='<%= properties.env.no_proxy %>'
|
15
|
+
export no_proxy='<%= properties.env.no_proxy %>'
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
REDIS='<%= properties.redis ? 1 : 0 %>'
|
4
|
+
|
5
|
+
# Usage: link_redis_config yaml config/redis.yml
|
6
|
+
function link_redis_config() {
|
7
|
+
format=$1 # e.g. yaml
|
8
|
+
target_file=${2:-config/redis.yml} # e.g. config/redis.yml
|
9
|
+
if [[ "${format}" != "yaml" ]]
|
10
|
+
then
|
11
|
+
echo "ERROR: 'link_redis_config ${format}' is not supported. Only supported format: yaml"
|
12
|
+
exit 1
|
13
|
+
fi
|
14
|
+
if [[ "$REDIS" = '1' ]]
|
15
|
+
then
|
16
|
+
link_job_file_to_package ${app_config}
|
17
|
+
fi
|
18
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Setup env vars and folders for the ctl script
|
4
|
+
# This helps keep the ctl script as readable
|
5
|
+
# as possible
|
6
|
+
|
7
|
+
set -e # exit immediately if a simple command exits with a non-zero status
|
8
|
+
set -u # report the usage of uninitialized variables
|
9
|
+
|
10
|
+
export JOB_NAME='<%= name %>'
|
11
|
+
export JOB_DIR=/var/vcap/jobs/$JOB_NAME
|
12
|
+
chmod 755 $JOB_DIR # to access file via symlink
|
13
|
+
|
14
|
+
# the package that contains the application code
|
15
|
+
WEBAPP_PACKAGE='<%= properties.webapp && properties.webapp.package %>'
|
16
|
+
WEBAPP_DIR=/var/vcap/packages/$WEBAPP_PACKAGE
|
17
|
+
if [[ "$WEBAPP_PACKAGE" = '' ]]
|
18
|
+
then
|
19
|
+
echo 'ERROR: $WEBAPP_PACKAGE not set before bin/ctl_setup.sh'
|
20
|
+
exit 1
|
21
|
+
fi
|
22
|
+
|
23
|
+
source $JOB_DIR/bin/ctl_utils.sh
|
24
|
+
redirect_output $JOB_NAME
|
25
|
+
|
26
|
+
export HOME=${HOME:-/home/vcap}
|
27
|
+
|
28
|
+
# Add all packages' /bin & /sbin into $PATH
|
29
|
+
for package_bin_dir in $(ls -d /var/vcap/packages/*/{,s}bin)
|
30
|
+
do
|
31
|
+
export PATH=${package_bin_dir}:$PATH
|
32
|
+
done
|
33
|
+
|
34
|
+
# Setup log, run and tmp folders
|
35
|
+
|
36
|
+
RUN_DIR=/var/vcap/sys/run/$JOB_NAME
|
37
|
+
LOG_DIR=/var/vcap/sys/log/$JOB_NAME
|
38
|
+
TMPDIR=/var/vcap/sys/tmp/$JOB_NAME
|
39
|
+
for dir in $RUN_DIR $LOG_DIR $TMPDIR
|
40
|
+
do
|
41
|
+
mkdir -p ${dir}
|
42
|
+
chown vcap:vcap ${dir}
|
43
|
+
done
|
44
|
+
|
45
|
+
export C_INCLUDE_PATH=/var/vcap/packages/mysqlclient/include/mysql:/var/vcap/packages/sqlite/include:/var/vcap/packages/libpq/include
|
46
|
+
export LIBRARY_PATH=/var/vcap/packages/mysqlclient/lib/mysql:/var/vcap/packages/sqlite/lib:/var/vcap/packages/libpq/lib
|
47
|
+
|
48
|
+
PIDFILE=$RUN_DIR/$JOB_NAME.pid
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Either:
|
4
|
+
# properties:
|
5
|
+
# webapp:
|
6
|
+
# appstack: puma
|
7
|
+
# puma:
|
8
|
+
# threads:
|
9
|
+
# min: 0
|
10
|
+
# max: 16
|
11
|
+
#
|
12
|
+
# Or PHP-FPM:
|
13
|
+
# properties:
|
14
|
+
# webapp:
|
15
|
+
# appstack: php-fpm
|
16
|
+
#
|
17
|
+
# Or (default)
|
18
|
+
# properties:
|
19
|
+
# webapp:
|
20
|
+
# appstack: rackup
|
21
|
+
#
|
22
|
+
# Requires env variables:
|
23
|
+
# * $WEBAPP_DIR
|
24
|
+
# * $PIDFILE
|
25
|
+
# * $PORT
|
26
|
+
appstack='<%= properties.webapp && properties.webapp.appstack %>'
|
27
|
+
|
28
|
+
echo "Launching $JOB_NAME within $WEBAPP_DIR with ${appstack}"
|
29
|
+
wait_for_database
|
30
|
+
|
31
|
+
if [[ "${appstack}" = "puma" ]]
|
32
|
+
then
|
33
|
+
<% puma_threads = properties.webapp.puma && properties.webapp.puma.threads %>
|
34
|
+
MIN_THREADS=<%= (puma_threads && puma_threads.min) || 0 %>
|
35
|
+
MAX_THREADS=<%= (puma_threads && puma_threads.max) || 16 %>
|
36
|
+
exec bundle exec puma --pidfile $PIDFILE -p $PORT -t $MIN_THREADS:$MAX_THREADS \
|
37
|
+
>>$LOG_DIR/webapp.stdout.log \
|
38
|
+
2>>$LOG_DIR/webapp.stderr.log || exit 1
|
39
|
+
|
40
|
+
elif [[ "${appstack}" = "rackup" ]]
|
41
|
+
then
|
42
|
+
exec bundle exec rackup -D -P $PIDFILE -p $PORT \
|
43
|
+
>>$LOG_DIR/webapp.stdout.log \
|
44
|
+
2>>$LOG_DIR/webapp.stderr.log || exit 1
|
45
|
+
|
46
|
+
elif [[ "${appstack}" = "phpfpm" || "${appstack}" = "php-fpm" ]]
|
47
|
+
then
|
48
|
+
/var/vcap/packages/php5/sbin/php-fpm \
|
49
|
+
-c $JOB_DIR/etc/php.ini \
|
50
|
+
--fpm-config $JOB_DIR/etc/php-fpm.conf \
|
51
|
+
--pid $PIDFILE
|
52
|
+
|
53
|
+
# else invalid appstack requested
|
54
|
+
else
|
55
|
+
echo "ERROR: properties.webapp.appstack = ${appstack}. Valid values: puma, rackup"
|
56
|
+
exit 1
|
57
|
+
fi
|
58
|
+
|
59
|
+
chown vcap:vcap $PIDFILE
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# Helper functions used by ctl scripts
|
2
|
+
|
3
|
+
# links a file (probably a config file) into a package
|
4
|
+
# Example usage:
|
5
|
+
# link_job_file_to_package config/redis.yml [config/redis.yml]
|
6
|
+
# link_job_file_to_package config/wp-config.php wp-config.php
|
7
|
+
link_job_file_to_package() {
|
8
|
+
source_job_file=$1
|
9
|
+
target_package_file=${2:-$source_job_file}
|
10
|
+
|
11
|
+
full_job_file=$JOB_DIR/${source_job_file}
|
12
|
+
full_package_file=$WEBAPP_DIR/${target_package_file}
|
13
|
+
echo link_job_file_to_package $full_job_file $full_package_file
|
14
|
+
if [[ ! -f ${full_job_file} ]]
|
15
|
+
then
|
16
|
+
echo "File to link ${full_job_file} does not exist"
|
17
|
+
else
|
18
|
+
# Create/recreate the symlink to current job file
|
19
|
+
# If another process is using the file, it won't be
|
20
|
+
# deleted, so don't attempt to create the symlink
|
21
|
+
echo "Linking ${source_job_file} -> ${full_package_file}"
|
22
|
+
mkdir -p $(dirname ${full_package_file})
|
23
|
+
ln -nfs ${full_job_file} ${full_package_file}
|
24
|
+
fi
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
# If loaded within monit ctl scripts then pipe output
|
29
|
+
# If loaded from 'source ../utils.sh' then normal STDOUT
|
30
|
+
redirect_output() {
|
31
|
+
SCRIPT=$1
|
32
|
+
mkdir -p /var/vcap/sys/log/monit
|
33
|
+
exec 1>> /var/vcap/sys/log/monit/$SCRIPT.log
|
34
|
+
exec 2>> /var/vcap/sys/log/monit/$SCRIPT.err.log
|
35
|
+
}
|
36
|
+
|
37
|
+
pid_guard() {
|
38
|
+
pidfile=$1
|
39
|
+
name=$2
|
40
|
+
|
41
|
+
if [ -f "$pidfile" ]; then
|
42
|
+
pid=$(head -1 "$pidfile")
|
43
|
+
|
44
|
+
if [ -n "$pid" ] && [ -e /proc/$pid ]; then
|
45
|
+
echo "$name is already running, please stop it first"
|
46
|
+
exit 1
|
47
|
+
fi
|
48
|
+
|
49
|
+
echo "Removing stale pidfile..."
|
50
|
+
rm $pidfile
|
51
|
+
fi
|
52
|
+
}
|
53
|
+
|
54
|
+
wait_pid() {
|
55
|
+
pid=$1
|
56
|
+
try_kill=$2
|
57
|
+
timeout=${3:-0}
|
58
|
+
force=${4:-0}
|
59
|
+
countdown=$(( $timeout * 10 ))
|
60
|
+
|
61
|
+
echo wait_pid $pid $try_kill $timeout $force $countdown
|
62
|
+
if [ -e /proc/$pid ]; then
|
63
|
+
if [ "$try_kill" = "1" ]; then
|
64
|
+
echo "Killing $pidfile: $pid "
|
65
|
+
kill $pid
|
66
|
+
fi
|
67
|
+
while [ -e /proc/$pid ]; do
|
68
|
+
sleep 0.1
|
69
|
+
[ "$countdown" != '0' -a $(( $countdown % 10 )) = '0' ] && echo -n .
|
70
|
+
if [ $timeout -gt 0 ]; then
|
71
|
+
if [ $countdown -eq 0 ]; then
|
72
|
+
if [ "$force" = "1" ]; then
|
73
|
+
echo -ne "\nKill timed out, using kill -9 on $pid... "
|
74
|
+
kill -9 $pid
|
75
|
+
sleep 0.5
|
76
|
+
fi
|
77
|
+
break
|
78
|
+
else
|
79
|
+
countdown=$(( $countdown - 1 ))
|
80
|
+
fi
|
81
|
+
fi
|
82
|
+
done
|
83
|
+
if [ -e /proc/$pid ]; then
|
84
|
+
echo "Timed Out"
|
85
|
+
else
|
86
|
+
echo "Stopped"
|
87
|
+
fi
|
88
|
+
else
|
89
|
+
echo "Process $pid is not running"
|
90
|
+
echo "Attempting to kill pid anyway..."
|
91
|
+
kill $pid
|
92
|
+
fi
|
93
|
+
}
|
94
|
+
|
95
|
+
wait_pidfile() {
|
96
|
+
pidfile=$1
|
97
|
+
try_kill=$2
|
98
|
+
timeout=${3:-0}
|
99
|
+
force=${4:-0}
|
100
|
+
countdown=$(( $timeout * 10 ))
|
101
|
+
|
102
|
+
if [ -f "$pidfile" ]; then
|
103
|
+
pid=$(head -1 "$pidfile")
|
104
|
+
if [ -z "$pid" ]; then
|
105
|
+
echo "Unable to get pid from $pidfile"
|
106
|
+
exit 1
|
107
|
+
fi
|
108
|
+
|
109
|
+
wait_pid $pid $try_kill $timeout $force
|
110
|
+
|
111
|
+
rm -f $pidfile
|
112
|
+
else
|
113
|
+
echo "Pidfile $pidfile doesn't exist"
|
114
|
+
fi
|
115
|
+
}
|
116
|
+
|
117
|
+
kill_and_wait() {
|
118
|
+
pidfile=$1
|
119
|
+
# Monit default timeout for start/stop is 30s
|
120
|
+
# Append 'with timeout {n} seconds' to monit start/stop program configs
|
121
|
+
timeout=${2:-25}
|
122
|
+
force=${3:-1}
|
123
|
+
if [[ -f ${pidfile} ]]
|
124
|
+
then
|
125
|
+
wait_pidfile $pidfile 1 $timeout $force
|
126
|
+
else
|
127
|
+
# TODO assume $1 is something to grep from 'ps ax'
|
128
|
+
pid="$(ps auwwx | grep "$1" | awk '{print $2}')"
|
129
|
+
wait_pid $pid 1 $timeout $force
|
130
|
+
fi
|
131
|
+
}
|
132
|
+
|
133
|
+
check_nfs_mount() {
|
134
|
+
opts=$1
|
135
|
+
exports=$2
|
136
|
+
mount_point=$3
|
137
|
+
|
138
|
+
if grep -qs $mount_point /proc/mounts; then
|
139
|
+
echo "Found NFS mount $mount_point"
|
140
|
+
else
|
141
|
+
echo "Mounting NFS..."
|
142
|
+
mount $opts $exports $mount_point
|
143
|
+
if [ $? != 0 ]; then
|
144
|
+
echo "Cannot mount NFS from $exports to $mount_point, exiting..."
|
145
|
+
exit 1
|
146
|
+
fi
|
147
|
+
fi
|
148
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
# USAGE monit_debugger <label> command to run
|
3
|
+
mkdir -p /var/vcap/sys/log/monit
|
4
|
+
{
|
5
|
+
echo "MONIT-DEBUG date"
|
6
|
+
date
|
7
|
+
echo "MONIT-DEBUG env"
|
8
|
+
env
|
9
|
+
echo "MONIT-DEBUG $@"
|
10
|
+
$2 $3 $4 $5 $6 $7
|
11
|
+
R=$?
|
12
|
+
echo "MONIT-DEBUG exit code $R"
|
13
|
+
} >/var/vcap/sys/log/monit/monit_debugger.$1.log 2>&1
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e # exit immediately if a simple command exits with a non-zero status
|
4
|
+
set -u # report the usage of uninitialized variables
|
5
|
+
|
6
|
+
# Setup env vars and folders for the webapp_ctl script
|
7
|
+
source /var/vcap/jobs/<%= job_name %>/bin/ctl_setup.sh
|
8
|
+
|
9
|
+
# Override ctl_setup.sh defaults:
|
10
|
+
redirect_output 'nginx'
|
11
|
+
PIDFILE=$RUN_DIR/nginx.pid
|
12
|
+
|
13
|
+
case $1 in
|
14
|
+
|
15
|
+
start)
|
16
|
+
pid_guard $PIDFILE "nginx for $JOB_NAME"
|
17
|
+
|
18
|
+
echo $$ > $PIDFILE
|
19
|
+
|
20
|
+
for dir in $UPLOADS_DIR $STAGED_UPLOADS_DIR
|
21
|
+
do
|
22
|
+
mkdir -p ${dir}
|
23
|
+
done
|
24
|
+
|
25
|
+
exec /var/vcap/packages/nginx_next/sbin/nginx \
|
26
|
+
-c $JOB_DIR/config/nginx.conf \
|
27
|
+
>>$LOG_DIR/nginx.stdout.log \
|
28
|
+
2>>$LOG_DIR/nginx.stderr.log
|
29
|
+
;;
|
30
|
+
|
31
|
+
stop)
|
32
|
+
echo "Stopping nginx"
|
33
|
+
kill_and_wait $PIDFILE
|
34
|
+
;;
|
35
|
+
|
36
|
+
*)
|
37
|
+
echo "Usage: nginx_ctl {start|stop}"
|
38
|
+
|
39
|
+
;;
|
40
|
+
|
41
|
+
esac
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Sets up ctl script for a Rails/Rack application
|
4
|
+
# * sets up $RAILS_ENV, $RACK_ENV
|
5
|
+
# * specifically sets $BUNDLE_GEMFILE, if $WEBAPP_DIR set
|
6
|
+
|
7
|
+
# Default properties:
|
8
|
+
#
|
9
|
+
# properties:
|
10
|
+
# webapp:
|
11
|
+
# migrate: false
|
12
|
+
# migration_command: rake db:migrate
|
13
|
+
|
14
|
+
migrate='<%= (properties.webapp && properties.webapp.migrate) || "false" %>'
|
15
|
+
migration_command='<%= (properties.webapp && properties.webapp.migration_command) || "rake db:migrate" %>'
|
16
|
+
|
17
|
+
export RAILS_ENV=production
|
18
|
+
export RACK_ENV=${RAILS_ENV}
|
19
|
+
if [[ "$WEBAPP_DIR" != '' ]]
|
20
|
+
then
|
21
|
+
export BUNDLE_GEMFILE=$WEBAPP_DIR/Gemfile
|
22
|
+
fi
|
23
|
+
|
24
|
+
function run_migrations() {
|
25
|
+
if [[ "${migrate}" = "true" || "${migrate}" = "1" || "${migrate}" = "yes" ]]
|
26
|
+
then
|
27
|
+
wait_for_database
|
28
|
+
|
29
|
+
echo "Running migrations"
|
30
|
+
bundle exec ${migration_command} \
|
31
|
+
>>$LOG_DIR/db_migrate.stdout.log \
|
32
|
+
2>>$LOG_DIR/db_migrate.stderr.log
|
33
|
+
if [ $? != 0 ]; then
|
34
|
+
echo "Migrations failed"
|
35
|
+
exit 1
|
36
|
+
fi
|
37
|
+
else
|
38
|
+
echo "Skipping migrations"
|
39
|
+
fi
|
40
|
+
}
|