Newer
Older
#
# Start diaspora websocket and main services
#
realpath=$( ruby -e "puts File.expand_path(\"$0\")")
cd $( dirname $realpath)/..
[ -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
if [ -e 'log/thin.pid' ]; then
bundle exec thin --pid log/thin.pid stop
else
echo "Warning: Something is wrong in your installation, thin didn't come up for the first time initialization!" >&2
echo "Try starting it manually with bundle exec thin start and look at the output." >&2
fi
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
}
function redis_config
# Create/update the local redis.conf file from /etc master
{
if [ ! -w config ]; then
# read-only installation, should be OK
return
fi
if [ -r "/etc/redis.conf" ]; then
redis_conf="/etc/redis.conf"
elif [ -r "/etc/redis/redis.conf" ]; then
redis_conf="/etc/redis/redis.conf"
else
echo <<- EOM
Don't know how to configure redis for this platform. Copy
the configuration file redis.conf to the config directory
and patch it manually. In particular, don't daemonize.
EOM
return
fi
if [ config/redis.conf -nt $redis_conf ]
then
return
fi
cp $redis_conf config/redis.conf
sed -i -e '/^[^#]*daemonize/s/yes/no/' \
-e '/^[^#]*logfile/s|.*|logfile /var/log/diaspora/redis.log|' \
config/redis.conf
# 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"
# Is someone listening on the ports already? (ipv4 only test ?)
if [ -n "$services" ]; then
echo "Error: thin port $THIN_PORT is already in use. Exiting" >&2
echo " $services"
exit 64
fi
if [ -n "$services" ]; then
echo "Error: websocket port $SOCKET_PORT is already in use. Exiting" >&2
echo " $services"
# See http://bugs.joindiaspora.com/issues/722
services=$( chk_service 5379 )
if [ -n "$services" ]; then
echo "Error: Someone (another redis server?) is using redis port 5379" >&2
echo " $services"
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
# Check if config files exists
if [ ! -e 'config/app_config.yml' ]; then
echo "config/app_config.yml is missing! Copy over config/app_config.yml.example to config/app_config.yml and edit it properly!" >&2
exit 67
fi
if [ ! -e 'config/database.yml' ]; then
echo 'config/database.yml is missing! Copy over config/database.yml.example to config/database.yml and edit it properly!' >&2
exit 68
fi
if [[ -w public && ! -e 'public/stylesheets/application.css' ]]; then
if [ "$INIT_PUBLIC" != 'no' ]; then
echo "Making first-time server initialization."
init_public
fi
if [ ! -e 'public/stylesheets/application.css' ]; then
echo 'Jammit precache error (now or at install)' >&2
fi
mkdir -p -v log/thin/
bundle exec ruby ./script/websocket_server.rb&
redis-server config/redis.conf &>log/redis-console.log &
danielvincent
a validé
QUEUE=* bundle exec rake resque:work&