Created
January 25, 2011 13:09
-
-
Save asux/794882 to your computer and use it in GitHub Desktop.
This BASH script for Rails project.
It runs MySQL embedded server (mysql server must be compiled with embedded feature).
It must by under $RAILS_ROOT/script directory
Author: Alexander Ulyanitsky <a.ulyanitsky@gmail.com>
License: Rails (BSD)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# This BASH script for Rails project. | |
# It runs MySQL embedded server. | |
# It must by under $RAILS_ROOT/script directory. | |
# Author: Alexander Ulyanitsky <a.ulyanitsky@gmail.com>. | |
# License: Rails (BSD). | |
case $(uname -s) in | |
Linux) gnu_readlink_bin="readlink";; | |
FreeBSD) gnu_readlink_bin="greadlink";; | |
*) echo "Can't determine GNU readlink utility" >&2; exit 11;; | |
esac | |
MYSQLD_BIN="/usr/sbin/mysqld" | |
RAILS_ROOT=$(${gnu_readlink_bin} -f $(dirname $(${gnu_readlink_bin} -f $0))/..) | |
MYSQL_CONFIG="${RAILS_ROOT}/config/mysql.conf" | |
MYSQL_DATA="${RAILS_ROOT}/db/mysql_data" | |
MYSQL_SOCKET="${RAILS_ROOT}/tmp/sockets/mysql.socket" | |
MYSQLD_PID_FILE="${RAILS_ROOT}/tmp/pids/mysql.pid" | |
print_help() { | |
cat >&1 <<HERE | |
Usage: | |
$0 [options] start|stop|restart | |
options is: | |
-b mysqld Path to mysqld binary (default: /usr/sbin/mysqld) | |
-c mysql.conf Path to MySQL config file (default: \$RAILS_ROOT/config/mysql.conf) | |
-d mysql_data Path to MySQL datadir (default \$RAILS_ROOT/db/mysql_data) | |
-s mysql.socket Path to MySQL socket (default: \$RAILS_ROOT/tmp/sockets/mysql.socket) | |
-p mysql.pid Path to MySQL pidfile (default: \$RAILS_ROOT/tmp/pids/mysql.pid) | |
-D Daemonize (default: false) | |
-v Be verbose (default: false) | |
-h Read this help | |
HERE | |
} | |
make_dirs() { | |
mkdir -p ${MYSQL_DATA} $(dirname ${MYSQL_CONFIG}) $(dirname ${MYSQL_SOCKET}) $(dirname ${MYSQLD_PID_FILE}) | |
} | |
check_mysql_bin() { | |
[ ! -z $1 ] && MYSQLD_BIN=$1 | |
if [ ! -x ${MYSQLD_BIN} ]; then | |
echo "mysqld binary not executable (${MYSQLD_BIN})" >&2 | |
exit 1 | |
fi | |
} | |
check_rails_root() { | |
if [ -z ${RAILS_ROOT} ]; then | |
echo "Rails root is empty string" >&2 | |
exit 2 | |
fi | |
if [ ! -d ${RAILS_ROOT} ]; then | |
echo "Rails root is not directory (${RAILS_ROOT})" >&2 | |
exit 3 | |
fi | |
[ -n "${VERBOSE}" ] && echo "Rails root is ${RAILS_ROOT}" | |
} | |
setup_mysql() { | |
if [ -n "${VERBOSE}" ]; then | |
echo "MySQL config is ${MYSQL_CONFIG}" | |
echo "MySQL data root is ${MYSQL_DATA}" | |
echo "MySQL socket is ${MYSQL_SOCKET}" | |
echo "MySQL pidfile is ${MYSQLD_PID_FILE}" | |
fi | |
if [ ! -f ${MYSQL_CONFIG} ]; then | |
if [ -f ${MYSQL_CONFIG}.example ]; then | |
cp ${MYSQL_CONFIG}.example ${MYSQL_CONFIG} | |
[ -n "${VERBOSE}" ] && echo "Coping config from example file" | |
else | |
echo "MySQL confg file not found (${MYSQL_CONFIG})" >&2 | |
exit 4 | |
fi | |
fi | |
if [ ! -d ${MYSQL_DATA} ]; then | |
echo "MySQL datadir is not directory" >&2 | |
exit 6 | |
fi | |
} | |
stop_server() { | |
if [ ! -f ${MYSQLD_PID_FILE} ] && [ ! -s ${MYSQL_SOCKET} ]; then | |
echo "Server not runned" >&2 | |
fi | |
[ -f ${MYSQLD_PID_FILE} ] && MYSQLD_PID=$(cat ${MYSQLD_PID_FILE}) | |
if [ -n "${MYSQLD_PID}" ]; then | |
[ -n "${VERBOSE}" ] && echo -n "Stopping server (PID ${MYSQLD_PID})" | |
kill -s TERM ${MYSQLD_PID} | |
while [ -f ${MYSQLD_PID_FILE} ]; do | |
[ -n "${VERBOSE}" ] && echo -n "." | |
sleep 0.1 | |
done | |
[ -n "${VERBOSE}" ] && echo | |
fi | |
} | |
start_server() { | |
if [ -f ${MYSQLD_PID_FILE} ] || [ -s ${MYSQL_SOCKET} ]; then | |
echo "Server already runned" >&2 | |
exit 7 | |
fi | |
make_dirs | |
check_mysql_bin | |
check_rails_root | |
setup_mysql | |
[ -n "${VERBOSE}" ] && echo -n "Running embedded MySQL server" | |
${MYSQLD_BIN} --defaults-file=${MYSQL_CONFIG} --datadir=${MYSQL_DATA} --socket=${MYSQL_SOCKET} --pid-file=${MYSQLD_PID_FILE} & | |
if [ $? -eq 0 ]; then | |
while [ ! -f ${MYSQLD_PID_FILE} ]; do | |
echo -n "." | |
sleep 0.1 | |
done | |
MYSQLD_PID=$(cat ${MYSQLD_PID_FILE}) | |
[ -n "${VERBOSE}" ] && echo -e "\nMySQL server PID is ${MYSQLD_PID}" | |
if [ -z "${DAEMONIZE}" ]; then | |
echo "Interrupt to stop server" | |
trap "echo; stop_server" INT | |
wait %1 | |
fi | |
fi | |
} | |
if [ $# -eq 0 ]; then | |
print_help | |
exit 10 | |
fi | |
while getopts "b:c:d:s:p:Dvh" option; do | |
case ${option} in | |
b) MYSQLD_BIN=${OPTARG};; | |
c) MYSQL_CONFIG=${OPTARG};; | |
d) MYSQL_DATA=${OPTARG};; | |
s) MYSQL_SOCKET=${OPTARG};; | |
p) MYSQLD_PID_FILE=${OPTARG};; | |
D) DAEMONIZE="true";; | |
v) VERBOSE="true";; | |
h) print_help; exit 0;; | |
*) print_help; exit 10;; | |
esac | |
done | |
shift $(($OPTIND - 1)) | |
CMD=$1 | |
case ${CMD} in | |
start) start_server;; | |
stop) stop_server;; | |
restart) stop_server; start_server;; | |
*) print_help;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment