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 FileUtils.mkdir_p 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