aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2018-04-15 19:52:17 +0200
committerHarald Eilertsen <haraldei@anduin.net>2018-04-15 19:52:17 +0200
commitd460969b6b7aa873db033b005eff99ff572d6471 (patch)
tree211744531361111d2dbcfa018f912797cbfd5555
parent564bd50672c9122daa77394e40b1491f0aae1b6e (diff)
downloadfreebsd-puma-d460969b6b7aa873db033b005eff99ff572d6471.tar.gz
freebsd-puma-d460969b6b7aa873db033b005eff99ff572d6471.tar.bz2
freebsd-puma-d460969b6b7aa873db033b005eff99ff572d6471.zip
Replace init script for unicorn with puma
-rwxr-xr-xpuma309
-rwxr-xr-xunicorn310
2 files changed, 309 insertions, 310 deletions
diff --git a/puma b/puma
new file mode 100755
index 0000000..10b8585
--- /dev/null
+++ b/puma
@@ -0,0 +1,309 @@
+#!/bin/sh
+
+# PROVIDE: puma
+# REQUIRE: LOGIN postgresql
+# KEYWORD: shutdown
+
+. /etc/rc.subr
+
+name="puma"
+rcvar="${name}_enable"
+procname="ruby"
+
+extra_commands="upgrade show reopenlogs"
+start_cmd="puma_start_command"
+upgrade_cmd="puma_upgrade_command"
+show_cmd="puma_show_command"
+reopenlogs_cmd="puma_reopenlogs_command"
+
+load_rc_config "${name}"
+
+: ${puma_enable:="NO"}
+: ${puma_flags:="-d"}
+: ${puma_env:="production"}
+: ${puma_init_config:=""}
+: ${puma_bundle_gemfile:=""}
+: ${puma_profiles:=""}
+: ${puma_upgrade_timeout:="60"}
+: ${puma_rc_script:="/usr/local/etc/rc.d/puma"}
+
+#
+# Convenience function to read a profile's environment variable, or fall back to a default
+#
+# e.x. _read_profile_var my_app pidfile '/u/my_app/shard/pids/puma.pid'
+#
+_read_profile_var()
+{
+ profile=$1
+ var=$2
+ default=$3
+ default2=$4
+ eval value="\${puma_${profile}_${var}:-${default}}"
+ eval value="\${value:-${default2}}"
+ echo "${value}"
+}
+
+#
+# Takes a directory and sets up some default environement variables based on a capistrano layout
+#
+_setup_directory()
+{
+ local directory
+ directory=$1
+
+ directory_command="${directory}/current/bin/puma"
+ directory_pidfile="${directory}/shared/tmp/pids/puma.pid"
+ directory_old_pidfile="${directory_pidfile}.oldbin"
+ directory_config="${directory}/current/config/puma.rb"
+ directory_rackup="${directory}/current/config.ru"
+ directory_init_config="${directory}/current/.env"
+ directory_bundle_gemfile="${directory}/current/Gemfile"
+ directory_chdir="${directory}/current"
+
+ # only use the directory_init_config if it exists
+ if [ ! -f "${directory_init_config}" ]; then
+ unset directory_init_config
+ fi
+
+ # only use the bundle_gemfile if it exists
+ if [ ! -f "${directory_bundle_gemfile}" ]; then
+ unset directory_bundle_gemfile
+ fi
+
+ if [ -f "${directory_config}" ]; then
+ directory_user=`stat -f "%Su" "${directory_config}"` # default to the owner of the config file
+ fi
+}
+
+#
+# If we have a profile, set up the environment for that profile
+#
+if [ -n "$2" ]; then
+ profile="$2"
+
+ # set the rcvar for this specific profile
+ rcvar="${name}_${profile}_enable"
+ rcvar="${rcvar}"
+
+ # if the user provides a directory, we can infer some default configuration
+ directory=`_read_profile_var "${profile}" "directory"`
+
+ if [ -n "${directory}" ]; then
+ _setup_directory "${directory}"
+ fi
+
+ puma_rackup=` _read_profile_var "${profile}" "rackup" "${directory_rackup}"`
+ puma_old_pidfile=` _read_profile_var "${profile}" "old_pidfile" "${directory_old_pidfile}"`
+ puma_config=` _read_profile_var "${profile}" "config" "${directory_config}"`
+ puma_init_config=` _read_profile_var "${profile}" "init_config" "${directory_init_config}"`
+ puma_bundle_gemfile=`_read_profile_var "${profile}" "bundle_gemfile" "${directory_bundle_gemfile}"`
+ puma_chdir=` _read_profile_var "${profile}" "chdir" "${directory_chdir}"`
+ puma_listen=` _read_profile_var "${profile}" "listen" "${puma_listen}"`
+ puma_user=` _read_profile_var "${profile}" "user" "${puma_user}" "${directory_user}"`
+ puma_nice=` _read_profile_var "${profile}" "nice" "${puma_nice}"`
+ puma_env=` _read_profile_var "${profile}" "env" "${puma_env}"`
+ puma_flags=` _read_profile_var "${profile}" "flags" "${puma_flags}"`
+
+ command=`_read_profile_var "${profile}" "command" "${puma_command}" "${directory_command}"`
+ command_args=`_read_profile_var "${profile}" "command_args" "${puma_command_args}" "${directory_command_args}"`
+ pidfile=`_read_profile_var "${profile}" "pidfile" "${directory_pidfile}"`
+else
+ if [ "x${puma_profiles}" != "x" -a "x$1" != "x" ]; then
+ # If we weren't started with a profile, run the command on all available profiles
+ for profile in ${puma_profiles}; do
+ # By default set the profile rcvar to no to suppress warnings by checkyesno
+ profile_rcvar="${name}_${profile}_enable"
+ eval "${profile_rcvar}=\${${profile_rcvar}:-'NO'}"
+
+ if checkyesno ${profile_rcvar}; then
+ echo "Running ${1} on ${profile}"
+ ${puma_rc_script} $1 $profile
+ else
+ echo "Skipping ${profile}"
+
+ # Unset the variable and then checkyesno again to print the warning
+ eval "unset ${profile_rcvar}"
+ checkyesno ${profile_rcvar}
+ fi
+ echo
+ done
+ exit 0
+ else
+ # look for a profile-less configuration
+
+ # if the user provides a directory, we can infer some default configuration
+ directory=${puma_directory:-}
+
+ if [ -n "${directory}" ]; then
+ _setup_directory "${directory}"
+ fi
+
+ puma_rackup=${puma_rackup:-$directory_rackup}
+ puma_old_pidfile=${puma_old_pidfile:-$directory_old_pidfile}
+ puma_chdir=${puma_chdir:-$directory_chdir}
+ puma_rackup=${puma_rackup:-$directory_rackup}
+ puma_user=${puma_user:-$directory_user}
+ puma_config=${puma_config:-$directory_config}
+ puma_init_config=${puma_init_config:-$directory_init_config}
+ puma_bundle_gemfile=${puma_bundle_gemfile:-$directory_bundle_gemfile}
+
+ command=${puma_command:-$directory_command}
+ command_args=${puma_command_args:-$directory_command_args}
+ pidfile=${puma_pidfile:-$directory_pidfile}
+ fi
+fi
+
+# add the directory as a required directory, if it's specified
+required_dirs="${directory:-}"
+
+# if we have a config file or rackup file specified, make sure it exists
+required_files="${puma_config:-} ${puma_rackup:-}"
+
+#
+# Build up the flags based on the environment variables
+#
+[ -n "${puma_listen}" ] && puma_flags="-b ${puma_listen} ${puma_flags}"
+[ -n "${puma_config}" ] && puma_flags="-C ${puma_config} ${puma_flags}"
+[ -n "${puma_env}" ] && puma_flags="-e ${puma_env} ${puma_flags}"
+
+# Add our rackup file to the puma command_args
+[ -n "${puma_rackup:-}" ] && command_args="${puma_rackup:-} ${command_args:-}"
+
+# This function builds the command to start puma. This is split out so we can
+# print it from the "show" command
+_puma_start_command()
+{
+ local shell_command
+ shell_command="${puma_bundle_gemfile:+export BUNDLE_GEMFILE=$puma_bundle_gemfile && }"\
+"${puma_init_config:+. $puma_init_config && }"\
+"${puma_chdir:+cd $puma_chdir && }"\
+"${puma_nice:+nice -n $puma_nice }"\
+"${command} ${rc_flags} ${command_args}"
+
+ if [ -n "${puma_user}" ]; then
+ echo "su -l ${puma_user} -c \"${shell_command}\""
+ else
+ echo "sh -c \"${shell_command}\""
+ fi
+}
+
+#
+# The start command
+#
+puma_start_command()
+{
+ # ensure puma isn't already running
+ if [ -z "$rc_fast" -a -n "$rc_pid" ]; then
+ echo 1>&2 "${name} already running? (pid=$rc_pid)."
+ return 1
+ fi
+
+ # ensure that the command exists and is executable
+ if [ ! -x "${_chroot}${_chroot:+/}${command}" ]; then
+ warn "run_rc_command: cannot run $command"
+ return 1
+ fi
+
+ check_startmsgs && echo "Starting ${name}: ${profile}."
+
+ eval "$(_puma_start_command)"
+ _return=$?
+
+ if [ $_return -ne 0 ] && [ -z "${rc_force}" ]; then
+ return 1
+ fi
+
+ return 0
+}
+
+puma_upgrade_command()
+{
+ if [ -n "${rc_pid}" ]; then
+ # Tell the master to spawn a new version of itself
+ if kill -USR2 "${rc_pid}"; then
+ n=$puma_upgrade_timeout
+
+ # Wait until the puma_old_pidfile and pidfile both exist and are non-empty
+ echo -n >&2 "Waiting for the new master to spawn"
+ while [ \( ! -s "${puma_old_pidfile}" -o ! -s "${pidfile}" \) -a $n -ge 0 ]; do
+ printf >&2 '.' && sleep 1 && n=$(( $n-1 ))
+ done
+ echo
+
+ # if the pidfile or puma_old_pidfile still don't exist, quit
+ if [ ! -s "${pidfile}" -o ! -s "${puma_old_pidfile}" ]; then
+ [ ! -s "${pidfile}" ] && echo >&2 "${pidfile} doesn't exist after ${puma_upgrade_timeout} seconds"
+ [ ! -s "${ppuma_old_pidfile}" ] && echo >&2 "${puma_old_pidfile} doesn't exist after ${puma_upgrade_timeout} seconds"
+ return 1
+ fi
+
+ # make sure the new master can receive signals, and then QUIT the old one
+ echo >&2 "Killing the old master"
+ kill -0 `check_pidfile "${pidfile}" "${procname}"` && kill -QUIT `check_pidfile "${puma_old_pidfile}" "${procname}"`
+
+ # Wait for the old master to die
+ echo -n >&2 "Waiting for the old master to cleanup"
+ while [ -s "${puma_old_pidfile}" -a $n -ge 0 ]; do
+ printf >&2 '.' && sleep 1 && n=$(( $n-1 ))
+ done
+ echo
+
+ # If the old master is still around, print that fact and exit with an error
+ if [ -s "${puma_old_pidfile}" -a $n -lt 0 ]; then
+ echo >&2 "${puma_old_pidfile} still exists after ${puma_upgrade_timeout} seconds"
+ return 1
+ fi
+
+ # everything worked, return success
+ return 0
+ fi
+
+ # If there isn't a pid in rc_pid, just run the start command
+ echo >&2 "Couldn't upgrade, running `start` instead"
+ $0 start "${2}"
+ fi
+}
+
+#
+# Prints the configuration for the given profile
+#
+puma_show_command()
+{
+ if [ -n "${profile}" ]; then
+ banner="Unicorn Configuration for ${profile}"
+ else
+ banner="Unicorn Configuration"
+ fi
+
+ echo "
+#
+# ${banner}
+#
+
+command: ${command}
+command_args: ${command_args}
+rackup: ${puma_rackup}
+pidfile: ${pidfile}
+old_pidfile: ${puma_old_pidfile}
+listen: ${puma_listen}
+config: ${puma_config}
+init_config: ${puma_init_config}
+bundle_gemfile: ${puma_bundle_gemfile}
+chdir: ${puma_chdir}
+user: ${puma_user}
+nice: ${puma_nice}
+env: ${puma_env}
+flags: ${puma_flags}
+
+start_command:
+
+$(_puma_start_command)
+"
+}
+
+puma_reopenlogs_command()
+{
+ [ -n "${rc_pid}" ] && kill -USR1 $rc_pid
+}
+
+run_rc_command "${1}"
diff --git a/unicorn b/unicorn
deleted file mode 100755
index 57aa955..0000000
--- a/unicorn
+++ /dev/null
@@ -1,310 +0,0 @@
-#!/bin/sh
-
-# PROVIDE: unicorn
-# REQUIRE: LOGIN postgresql
-# KEYWORD: shutdown
-
-. /etc/rc.subr
-
-name="unicorn"
-rcvar="${name}_enable"
-procname="ruby"
-
-extra_commands="upgrade show reopenlogs"
-start_cmd="unicorn_start_command"
-upgrade_cmd="unicorn_upgrade_command"
-show_cmd="unicorn_show_command"
-reopenlogs_cmd="unicorn_reopenlogs_command"
-
-load_rc_config "${name}"
-
-: ${unicorn_enable:="NO"}
-: ${unicorn_flags:="-D"}
-: ${unicorn_env:="production"}
-: ${unicorn_init_config:=""}
-: ${unicorn_bundle_gemfile:=""}
-: ${unicorn_profiles:=""}
-: ${unicorn_upgrade_timeout:="60"}
-: ${unicorn_rc_script:="/usr/local/etc/rc.d/unicorn"}
-
-#
-# Convenience function to read a profile's environment variable, or fall back to a default
-#
-# e.x. _read_profile_var my_app pidfile '/u/my_app/shard/pids/unicorn.pid'
-#
-_read_profile_var()
-{
- profile=$1
- var=$2
- default=$3
- default2=$4
- eval value="\${unicorn_${profile}_${var}:-${default}}"
- eval value="\${value:-${default2}}"
- echo "${value}"
-}
-
-#
-# Takes a directory and sets up some default environement variables based on a capistrano layout
-#
-_setup_directory()
-{
- local directory
- directory=$1
-
- directory_command="${directory}/current/bin/unicorn"
- directory_pidfile="${directory}/shared/tmp/pids/unicorn.pid"
- directory_old_pidfile="${directory_pidfile}.oldbin"
- directory_config="${directory}/current/config/unicorn.rb"
- directory_rackup="${directory}/current/config.ru"
- directory_init_config="${directory}/current/.env"
- directory_bundle_gemfile="${directory}/current/Gemfile"
- directory_chdir="${directory}/current"
-
- # only use the directory_init_config if it exists
- if [ ! -f "${directory_init_config}" ]; then
- unset directory_init_config
- fi
-
- # only use the bundle_gemfile if it exists
- if [ ! -f "${directory_bundle_gemfile}" ]; then
- unset directory_bundle_gemfile
- fi
-
- if [ -f "${directory_config}" ]; then
- directory_user=`stat -f "%Su" "${directory_config}"` # default to the owner of the config file
- fi
-}
-
-#
-# If we have a profile, set up the environment for that profile
-#
-if [ -n "$2" ]; then
- profile="$2"
-
- # set the rcvar for this specific profile
- rcvar="${name}_${profile}_enable"
- rcvar="${rcvar}"
-
- # if the user provides a directory, we can infer some default configuration
- directory=`_read_profile_var "${profile}" "directory"`
-
- if [ -n "${directory}" ]; then
- _setup_directory "${directory}"
- fi
-
- unicorn_rackup=` _read_profile_var "${profile}" "rackup" "${directory_rackup}"`
- unicorn_old_pidfile=` _read_profile_var "${profile}" "old_pidfile" "${directory_old_pidfile}"`
- unicorn_config=` _read_profile_var "${profile}" "config" "${directory_config}"`
- unicorn_init_config=` _read_profile_var "${profile}" "init_config" "${directory_init_config}"`
- unicorn_bundle_gemfile=`_read_profile_var "${profile}" "bundle_gemfile" "${directory_bundle_gemfile}"`
- unicorn_chdir=` _read_profile_var "${profile}" "chdir" "${directory_chdir}"`
- unicorn_listen=` _read_profile_var "${profile}" "listen" "${unicorn_listen}"`
- unicorn_user=` _read_profile_var "${profile}" "user" "${unicorn_user}" "${directory_user}"`
- unicorn_nice=` _read_profile_var "${profile}" "nice" "${unicorn_nice}"`
- unicorn_env=` _read_profile_var "${profile}" "env" "${unicorn_env}"`
- unicorn_flags=` _read_profile_var "${profile}" "flags" "${unicorn_flags}"`
-
- command=`_read_profile_var "${profile}" "command" "${unicorn_command}" "${directory_command}"`
- command_args=`_read_profile_var "${profile}" "command_args" "${unicorn_command_args}" "${directory_command_args}"`
- pidfile=`_read_profile_var "${profile}" "pidfile" "${directory_pidfile}"`
-else
- if [ "x${unicorn_profiles}" != "x" -a "x$1" != "x" ]; then
- # If we weren't started with a profile, run the command on all available profiles
- for profile in ${unicorn_profiles}; do
- # By default set the profile rcvar to no to suppress warnings by checkyesno
- profile_rcvar="${name}_${profile}_enable"
- eval "${profile_rcvar}=\${${profile_rcvar}:-'NO'}"
-
- if checkyesno ${profile_rcvar}; then
- echo "Running ${1} on ${profile}"
- ${unicorn_rc_script} $1 $profile
- else
- echo "Skipping ${profile}"
-
- # Unset the variable and then checkyesno again to print the warning
- eval "unset ${profile_rcvar}"
- checkyesno ${profile_rcvar}
- fi
- echo
- done
- exit 0
- else
- # look for a profile-less configuration
-
- # if the user provides a directory, we can infer some default configuration
- directory=${unicorn_directory:-}
-
- if [ -n "${directory}" ]; then
- _setup_directory "${directory}"
- fi
-
- unicorn_rackup=${unicorn_rackup:-$directory_rackup}
- unicorn_old_pidfile=${unicorn_old_pidfile:-$directory_old_pidfile}
- unicorn_chdir=${unicorn_chdir:-$directory_chdir}
- unicorn_rackup=${unicorn_rackup:-$directory_rackup}
- unicorn_user=${unicorn_user:-$directory_user}
- unicorn_config=${unicorn_config:-$directory_config}
- unicorn_init_config=${unicorn_init_config:-$directory_init_config}
- unicorn_bundle_gemfile=${unicorn_bundle_gemfile:-$directory_bundle_gemfile}
-
- command=${unicorn_command:-$directory_command}
- command_args=${unicorn_command_args:-$directory_command_args}
- pidfile=${unicorn_pidfile:-$directory_pidfile}
- fi
-fi
-
-# add the directory as a required directory, if it's specified
-required_dirs="${directory:-}"
-
-# if we have a config file or rackup file specified, make sure it exists
-required_files="${unicorn_config:-} ${unicorn_rackup:-}"
-
-#
-# Build up the flags based on the environment variables
-#
-[ -n "${unicorn_listen}" ] && unicorn_flags="-l ${unicorn_listen} ${unicorn_flags}"
-[ -n "${unicorn_config}" ] && unicorn_flags="-c ${unicorn_config} ${unicorn_flags}"
-[ -n "${unicorn_env}" ] && unicorn_flags="-E ${unicorn_env} ${unicorn_flags}"
-
-# Add our rackup file to the unicorn command_args
-[ -n "${unicorn_rackup:-}" ] && command_args="${unicorn_rackup:-} ${command_args:-}"
-
-# This function builds the command to start unicorn. This is split out so we can
-# print it from the "show" command
-_unicorn_start_command()
-{
- local shell_command
- shell_command="${unicorn_bundle_gemfile:+export BUNDLE_GEMFILE=$unicorn_bundle_gemfile && }"\
-"${unicorn_init_config:+. $unicorn_init_config && }"\
-"${unicorn_chdir:+cd $unicorn_chdir && }"\
-"${unicorn_nice:+nice -n $unicorn_nice }"\
-"${command} ${rc_flags} ${command_args}"
-
- if [ -n "${unicorn_user}" ]; then
- echo "su -l ${unicorn_user} -c \"${shell_command}\""
- else
- echo "sh -c \"${shell_command}\""
- fi
-}
-
-#
-# The start command
-#
-unicorn_start_command()
-{
- # ensure unicorn isn't already running
- if [ -z "$rc_fast" -a -n "$rc_pid" ]; then
- echo 1>&2 "${name} already running? (pid=$rc_pid)."
- return 1
- fi
-
- # ensure that the command exists and is executable
- if [ ! -x "${_chroot}${_chroot:+/}${command}" ]; then
- warn "run_rc_command: cannot run $command"
- return 1
- fi
-
- check_startmsgs && echo "Starting ${name}: ${profile}."
-
- eval "$(_unicorn_start_command)"
- _return=$?
-
- if [ $_return -ne 0 ] && [ -z "${rc_force}" ]; then
- return 1
- fi
-
- return 0
-}
-
-unicorn_upgrade_command()
-{
- if [ -n "${rc_pid}" ]; then
- # Tell the master to spawn a new version of itself
- if kill -USR2 "${rc_pid}"; then
- n=$unicorn_upgrade_timeout
-
- # Wait until the unicorn_old_pidfile and pidfile both exist and are non-empty
- echo -n >&2 "Waiting for the new master to spawn"
- while [ \( ! -s "${unicorn_old_pidfile}" -o ! -s "${pidfile}" \) -a $n -ge 0 ]; do
- printf >&2 '.' && sleep 1 && n=$(( $n-1 ))
- done
- echo
-
- # if the pidfile or unicorn_old_pidfile still don't exist, quit
- if [ ! -s "${pidfile}" -o ! -s "${unicorn_old_pidfile}" ]; then
- [ ! -s "${pidfile}" ] && echo >&2 "${pidfile} doesn't exist after ${unicorn_upgrade_timeout} seconds"
- [ ! -s "${punicorn_old_pidfile}" ] && echo >&2 "${unicorn_old_pidfile} doesn't exist after ${unicorn_upgrade_timeout} seconds"
- return 1
- fi
-
- # make sure the new master can receive signals, and then QUIT the old one
- echo >&2 "Killing the old master"
- kill -0 `check_pidfile "${pidfile}" "${procname}"` && kill -QUIT `check_pidfile "${unicorn_old_pidfile}" "${procname}"`
-
- # Wait for the old master to die
- echo -n >&2 "Waiting for the old master to cleanup"
- while [ -s "${unicorn_old_pidfile}" -a $n -ge 0 ]; do
- printf >&2 '.' && sleep 1 && n=$(( $n-1 ))
- done
- echo
-
- # If the old master is still around, print that fact and exit with an error
- if [ -s "${unicorn_old_pidfile}" -a $n -lt 0 ]; then
- echo >&2 "${unicorn_old_pidfile} still exists after ${unicorn_upgrade_timeout} seconds"
- return 1
- fi
-
- # everything worked, return success
- return 0
- fi
-
- # If there isn't a pid in rc_pid, just run the start command
- echo >&2 "Couldn't upgrade, running `start` instead"
- $0 start "${2}"
- fi
-}
-
-#
-# Prints the configuration for the given profile
-#
-unicorn_show_command()
-{
- if [ -n "${profile}" ]; then
- banner="Unicorn Configuration for ${profile}"
- else
- banner="Unicorn Configuration"
- fi
-
- echo "
-#
-# ${banner}
-#
-
-command: ${command}
-command_args: ${command_args}
-rackup: ${unicorn_rackup}
-pidfile: ${pidfile}
-old_pidfile: ${unicorn_old_pidfile}
-listen: ${unicorn_listen}
-config: ${unicorn_config}
-init_config: ${unicorn_init_config}
-bundle_gemfile: ${unicorn_bundle_gemfile}
-chdir: ${unicorn_chdir}
-user: ${unicorn_user}
-nice: ${unicorn_nice}
-env: ${unicorn_env}
-flags: ${unicorn_flags}
-
-start_command:
-
-$(_unicorn_start_command)
-"
-}
-
-unicorn_reopenlogs_command()
-{
- [ -n "${rc_pid}" ] && kill -USR1 $rc_pid
-}
-
-run_rc_command "${1}"
-