rails_env = ENV['RAILS_ENV'] || "production" rails_root = ENV['RAILS_ROOT'] || "/var/rails/my_discourse" user = ENV["DISCOURSE_USER"] || ENV['USER'] || 'user_running_app' group = ENV["DISCOURSE_GROUP"] || ENV['GROUP'] || 'www-data' num_webs = ENV["NUM_WEBS"].to_i > 0 ? ENV["NUM_WEBS"].to_i : 4 # to debug use #Bluepill.application("your_app", :foreground => true) do |app| # Running bluepill as a user? Use: Bluepill.application("discourse", :base_dir => ENV["HOME"] + '/.bluepill') do |app| # Running bluepill as root? Use: #Bluepill.application("discourse") do |app| app.gid = group app.uid = user # getting this to work was a nightmare # bundle exec spawns a process totally messing with the demonize option # so we suck the environment out and set it up first bootup_bundle = [ "#{ENV['HOME']}/.rvm/bin/rvm/bootup_bundle", "/usr/local/rvm/bin/rvm/bootup_bundle", `which bootup_bundle`.strip, ].each do |location| if File.exist? location break location end end # XXX if none match, bootup_bundle is set to the array if bootup_bundle app.environment = `env -i BUNDLE_GEMFILE=#{rails_root}/Gemfile #{bootup_bundle} exec env`.lines.inject({}) do |env_hash,l| kv = l.chomp.split('=',2) env_hash[kv[0]] = kv[1] env_hash end end app.environment ||= {} app.environment['RAILS_ENV'] = rails_env app.gid = group app.uid = user app.working_dir = rails_root sockdir = "#{rails_root}/tmp/sockets" File.directory? sockdir or Dir.mkdir sockdir num_webs.times do |i| app.process("thin-#{i}") do |process| process.start_command = "bundle exec thin start -e production -t 0 --socket #{sockdir}/thin.#{i}.sock --pid #{rails_root}/tmp/pids/thin#{i}.pid --log #{rails_root}/log/thin-#{i}.log --daemonize" # Alternatively, you can start with a port number instead of a socket. If you do that, then you MUST update # the upstream section in the nginx config to match. # The nginx.sample.conf file assumes you're using sockets. # process.start_command = "bundle exec thin start -e production -t 0 -p #{9040 + i} -P #{rails_root}/tmp/pids/thin#{i}.pid -d" process.pid_file = "#{rails_root}/tmp/pids/thin#{i}.pid" process.start_grace_time = 30.seconds process.stop_grace_time = 10.seconds process.restart_grace_time = 10.seconds process.group = "thins" process.uid = user process.gid = group process.daemonize = false process.stdout = process.stderr = "#{rails_root}/log/thin#{i}.log" end end #debug instance # app.process("thin-debug") do |process| # process.start_command = "bundle exec thin start -e development -t 0 -p 10040 -P #{rails_root}/tmp/pids/thin-debug.pid -l #{rails_root}/log/thin-debug.log" -d" # process.pid_file = "#{rails_root}/tmp/pids/thin-debug.pid" # process.start_grace_time = 30.seconds # process.stop_grace_time = 10.seconds # process.restart_grace_time = 10.seconds # process.group = "thins" # process.uid = user # process.gid = group # process.daemonize = false # process.stdout = process.stderr = "#{rails_root}/log/thin-debug.log" # end app.process("sidekiq-worker") do |process| pidfile = "#{rails_root}/tmp/pids/sidekiq-worker.pid" process.start_command = "/usr/bin/env PIDFILE=#{pidfile} RAILS_ENV=#{rails_env} bundle exec sidekiq -L #{rails_root}/log/sidekiq.log" process.pid_file = pidfile process.start_grace_time = 30.seconds process.stop_grace_time = 10.seconds process.restart_grace_time = 10.seconds process.uid = user process.gid = group process.daemonize = true end # Perhaps you want to run `hostname -f` here? It depends on your environment # In any case, ensure the output is what you expect it to be on the system # running clockwork! if `hostname -s`.strip == "host to run on" app.process("clockwork") do |process| pidfile = "#{rails_root}/tmp/pids/clockwork.pid" process.start_command = "/usr/bin/env CLOCK_LOG=#{rails_root}/log/clockwork.log RAILS_ENV=#{rails_env} bundle exec clockwork config/clock.rb" process.pid_file = pidfile process.start_grace_time = 30.seconds process.stop_grace_time = 10.seconds process.restart_grace_time = 10.seconds process.uid = user process.gid = group process.daemonize = true end end end