简体   繁体   中英

God resque start gives “The server is not available”

I'm having trouble figuring out how to get God to restart resque.

I've got a Rails 3.2.2 stack on a Ubuntu 10.04.3 LTS Linode slice. Its running system Ruby 1.9.3-p194 (no RVM).

There's a God init.d service at /etc/init.d/god-service that contains:

CONF_DIR=/etc/god
GOD_BIN=/var/www/myapp.com/shared/bundle/ruby/1.9.1/bin/god
RUBY_BIN=/usr/local/bin/ruby
RETVAL=0

# Go no further if config directory is missing.
[ -d "$CONF_DIR" ] || exit 0

case "$1" in
    start)
        # Create pid directory
        $RUBY_BIN $GOD_BIN -c $CONF_DIR/master.conf
        RETVAL=$?
  ;;
    stop)
        $RUBY_BIN $GOD_BIN terminate
        RETVAL=$?
  ;;
    restart)
        $RUBY_BIN $GOD_BIN terminate
        $RUBY_BIN $GOD_BIN -c $CONF_DIR/master.conf
        RETVAL=$?
  ;;
    status)
        $RUBY_BIN $GOD_BIN status
        RETVAL=$?
  ;;
    *)
        echo "Usage: god {start|stop|restart|status}"
        exit 1
  ;;
esac

exit $RETVAL

master.conf in the above contains:

load "/var/www/myapp.com/current/config/resque.god"

resque.god in the above contains:

APP_ROOT  = "/var/www/myapp.com/current"
God.log_file  = "/var/www/myapp.com/shared/log/god.log"


God.watch do |w|
  w.name = 'resque'
  w.interval = 30.seconds
  w.dir = File.expand_path(File.join(File.dirname(__FILE__),'..'))
  w.start = "RAILS_ENV=production bundle exec rake resque:work QUEUE=*"
  w.uid = "deploy"
  w.gid = "deploy"

  w.start_grace = 10.seconds
  w.log = File.expand_path(File.join(File.dirname(__FILE__), '..','log','resque-worker.log'))

  # restart if memory gets too high
  w.transition(:up, :restart) do |on|
    on.condition(:memory_usage) do |c|
      c.above = 200.megabytes
      c.times = 2
    end
  end

  # determine the state on startup
  w.transition(:init, { true => :up, false => :start }) do |on|
    on.condition(:process_running) do |c|
      c.running = true
    end
  end

  # determine when process has finished starting
  w.transition([:start, :restart], :up) do |on|
    on.condition(:process_running) do |c|
      c.running = true
      c.interval = 5.seconds
    end

    # failsafe
    on.condition(:tries) do |c|
      c.times = 5
      c.transition = :start
      c.interval = 5.seconds
    end
  end

  # start if process is not running
  w.transition(:up, :start) do |on|
    on.condition(:process_running) do |c|
      c.running = false
    end
  end
end

In deploy.rb I have a reload task:

task :reload_god_config do
  run "god stop resque"
  run "god load #{File.join(deploy_to, 'current', 'config', 'resque.god')}"
  run "god start resque"
end

The problem is whether I deploy, or run god (stop|start|restart|status) resque manually, I get the error message:

The server is not available (or you do not have permissions to access it)

I tried installing god to system gems and pointing to it in god-service :

GOD_BIN=/usr/local/bin/god

but god start rescue gives the same error.

However, I can start the service by doing:

sudo /etc/init.d/god-service start

So its probably a permissions issue, I think, probably related to the fact that the init.d service is owned by root and god is run from the bundle by the deploy user.

What's the best way around this issue?

You're running the god service as a different user (there's a good chance root).

Also check out: God not running: The server is not available (or you do not have permissions to access it)

First you check whether you have installed god in your machine using "god --version" command. If its available just try to run some god script with -D option. Example "god -c sample.god -D" it will give you some type of error messages in the standard output in your console where is the exact issue. I was also getting same error when i try to run the commmand without "-D" option. Then when i tried with "-D" mode it was told some folder write permission issue i could able to find it and fix it.

Ok this is an issue with your config files, check them all of them + the includes somewhere it fails throwing you this error. I checked mine and fixes some errors afterwards it worked perfectly!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM