diaspora/script/server
Jonne Haß 79a79d65d6 Bye Resque. Ohai Sidekiq.
* Dropped all references to Resque
* Moved all jobs under app/workers since that's the Sidekiq convention
* Renamed Jobs module to Worker to match new location
* Adapted all jobs to Sidekiq
* Replaced all enqueue calls with perform_async
* Dropped Resque hacks from specs and features, replaced with
  sidekig/testing in RSpec and sidekig/testing/inline in Cucumber
* Updated scripts to start a Sidekiq server
* Inline Sidekiq sinatra app
* Let Sidekiq create the actual Redis instance
* Workaround already initialized constant warnings in service models
* Resolved ToDo in one job definition by creating proper exception clases
  for some errors in receiving posts
* Added sidekiq section to configuration to make it completly
  configurable to the user
* Add Sidekiq middleware for clean backtraces
* Delay HttpMulti retry to give offline pods a chance to come back up
* Do not retry on GUID already taken and alike errors
* Be graceful about deleted posts in GatherOEmbedData
2013-03-21 23:39:07 +01:00

111 lines
3 KiB
Bash
Executable file

#!/bin/sh
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
# ensure right directory
realpath=$( ruby -e "puts File.expand_path(\"$0\")")
cd $(dirname $realpath)/..
#Warn if legacy config exists
if [ -e 'config/script_server.yml' ]; then
echo "WARNING: config/script_server.yml was merged into config/diaspora.yml. Please read the changelog!" >&2
fi
# Check if database.yml exists
if [ ! -e 'config/database.yml' ]; then
echo 'FATAL: config/database.yml is missing! Copy over config/database.yml.example to config/database.yml and edit it properly!' >&2
exit 68
fi
# Check if diaspora.yml exists
if [ ! -e 'config/diaspora.yml' ]; then
echo 'FATAL: config/diaspora.yml is missing! Copy over config/diaspora.yml.example to config/diaspora.yml and edit it properly!' >&2
exit 70
fi
# Setup environment
if [ -z "$RAILS_ENV" ]; then
RAILS_ENV=$(bundle exec ruby ./script/get_config.rb server.rails_environment)
export RAILS_ENV
fi
os=`uname -s`
eval $(bundle exec ruby ./script/get_config.rb \
port=server.port \
db=server.database \
single_process_mode=environment.single_process_mode?
embed_sidekiq_worker=server.embed_sidekiq_worker
)
if [ -z "$DB" ]; then
DB=$db
export DB
fi
args="$@"
prev_arg=''
for arg in $( echo $args | awk '{ for (i = 1; i <= NF; i++) print $i}')
do
[ "$prev_arg" = '-p' ] && port="$arg"
prev_arg="$arg"
done
# Check if already running/port blocked
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
}
services=$( chk_service $port )
if [ -n "$services" ]; then
echo "FATAL: Error: port $port is already in use. Exiting" >&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 "FATAL: Error: Can't find, or even create, public/source.tar.gz. Exiting" >&2
exit 65
fi
# Check if assets are precompiled
if [ "$RAILS_ENV" = 'production' ]; then
if [ ! -e 'public/assets/default.css' ]; then
echo "FATAL: You're running in production mode without having assets precompiled." >&2
echo "Now and after each update before you restart the application, run:" >&2
echo "bundle exec rake assets:precompile" >&2
exit 71
fi
fi
# Start Diaspora
echo -n "Starting Diaspora in $RAILS_ENV mode on port $port "
if [ "$embed_sidekiq_worker" = "true" ]; then
echo "with a sidekiq worker embeded into unicorn."
elif [ "$single_process_mode" = "true" ]; then
echo "with job processing inside the request cycle."
fi
echo ""
exec bundle exec foreman start -m "web=1,sidekiq=1" -p $port