#!/bin/bash # # Start diaspora websocket and main services # realpath=$( ruby -e "puts File.expand_path(\"$0\")") cd $( dirname $realpath)/.. OS=`uname -s` [ -e config/server.sh ] && source config/server.sh function init_public # Create all dynamically generated files in public/ folder { bundle exec thin \ -d --pid log/thin.pid --address localhost --port $THIN_PORT \ start for ((i = 0; i < 30; i += 1)) do sleep 2 wget -q -O tmp/server.html http://localhost:$THIN_PORT && \ rm tmp/server.html && break done bundle exec thin --pid log/thin.pid stop if [ -e tmp/server.html ]; then echo "Cannot get index.html from web server (aborted)" >&2 return 2 fi bundle exec jammit } function chk_service { port=${1:?Missing port} case $OS in *[Bb][Ss][Dd]*|Darwin) ## checks ipv[46] netstat -anL | awk '{print $2}' | grep "\.$1$" ;; *) # Is someone listening on the ports already? (ipv4 only test ?) netstat -nl | grep '[^:]:'$port'[ \t]' ;; esac } # Scan for -p, find out what port thin is about to use. args="$DEFAULT_THIN_ARGS $@" prev_arg='' for arg in $( echo $args | awk '{ for (i = 1; i <= NF; i++) print $i}') do [ "$prev_arg" = '-p' ] && THIN_PORT="$arg" prev_arg="$arg" done # Is someone listening on the ports already? (ipv4 only test ?) services=$( chk_service $THIN_PORT ) if [ -n "$services" ]; then echo "Error: thin port $THIN_PORT is already in use. Exiting" >&2 echo " $services" exit 64 fi services=$( chk_service $SOCKET_PORT ) if [ -n "$services" ]; then echo "Error: websocket port $SOCKET_PORT is already in use. Exiting" >&2 echo " $services" exit 64 fi # Check if Mongo is running if ! ps ax | grep -v grep | grep mongod >/dev/null then echo "Error: Mongod not started. Exiting" >&2 exit 64 fi # Force AGPL if [ -w public -a ! -e public/source.tar.gz ]; then branch=$( git branch | awk '/^[*]/ {print $2}') tar czf public/source.tar.gz `git ls-tree -r $branch | awk '{print $4}'` fi if [ ! -e public/source.tar.gz ]; then echo "Error: Can't find, or even create, public/source.tar.gz. Exiting" >&2 exit 65 fi # Precache jammit assets if [[ -w public && ! -e 'public/stylesheets/application.css' ]]; then if [ "$INIT_PUBLIC" != 'no' ]; then echo "Making first-time server initialization." init_public fi fi if [ ! -e 'public/stylesheets/application.css' ]; then echo 'Jammit precache error (now or at install)' >&2 exit 66 fi mkdir -p -v log/thin/ bundle exec ruby ./script/websocket_server.rb& redis-server &>log/redis.log & QUEUE=* bundle exec rake resque:work& bundle exec thin start $args # vim:ts=4:sw=4:expandtab