我无法弄清楚如何让上帝重新启动resque。
我在Ubuntu 10.04.3 LTS Linode切片上有一个Rails 3.2.2堆栈。它的运行系统Ruby 1.9.3-p194(没有RVM)。
在/etc/init.d/god-service
有一个上帝init.d服务,其中包含:
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
包含:
load "/var/www/myapp.com/current/config/resque.god"
上面的 resque.god
包含:
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
在deploy.rb
我有一个重装任务:
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
问题在于我是部署还是手动运行god (stop|start|restart|status) resque
,我收到错误消息:
The server is not available (or you do not have permissions to access it)
我尝试将god
安装到系统宝石并在god-service
中指向它:
GOD_BIN=/usr/local/bin/god
但是god start rescue
会出现同样的错误。
但是,我可以通过以下方式启动服务:
sudo /etc/init.d/god-service start
因此,我认为它可能是一个权限问题,可能与这样一个事实有关:init.d服务由root
拥有,并且上帝是由deploy
用户从包中运行的。
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
您以不同的用户身份运行上帝服务(根本没有机会)。
另请查看:God not running: The server is not available (or you do not have permissions to access it)
答案 1 :(得分:0)
首先,您使用“ god --version”命令检查是否已在计算机中安装了God。如果可用,请尝试使用-D选项运行某些God脚本。示例“ god -c sample.god -D”将在控制台的标准输出中为您提供某些类型的错误消息,确切的问题出在哪里。当我尝试运行不带“ -D”选项的命令时,我也遇到了同样的错误。然后,当我尝试使用“ -D”模式时,被告知存在一些文件夹写入权限问题,我可以找到它并进行修复。
答案 2 :(得分:-3)
好的,这是你的配置文件的一个问题,检查它们所有这些+包含它失败的地方扔你这个错误。我检查了我的并修复了一些错误,之后它完美地工作了!