Resque作业停留在挂起状态中。

5

我的工人们没有正常地工作。

我的调度程序似乎不起作用。但是,当我手动将某些内容加入队列时,我可以看到它已成功添加,但它会停留在待处理状态。

手动添加的意思是像这样:

Resque.enqueue(MyJob,<params>)

有些任务一直处于挂起状态,而其他任务(例如我的resque_scheduler中的任务)根本没有被加入队列。

我尝试重新启动工作进程,但也不起作用。

你有什么想法可能是发生了什么?如果需要更多信息/转储,请告诉我。

谢谢。


a)是否在使用resque_scheduler,如果是,请确认是否已启动:是的,我正在使用。我刚刚运行了rake resque:scheduler RAILS_ENV=production命令。

2013-09-11 16:38:08 Reloading Schedule
2013-09-11 16:38:08 Loading Schedule
2013-09-11 16:38:08 Scheduling c_aggregator_job 
2013-09-11 16:38:08 Scheduling ca_aggregator_job 
2013-09-11 16:38:08 Scheduling l_history_aggregator 
2013-09-11 16:38:08 Scheduling target_aggregator 
2013-09-11 16:38:08 Scheduling view_count_aggregator 
2013-09-11 16:38:08 Scheduling searches_view_aggregator 
2013-09-11 16:38:08 Scheduling b_view_count_aggregator_job 
2013-09-11 16:38:08 Scheduling y_aggregator 
2013-09-11 16:38:08 Schedules Loaded

所以我认为它正在工作,对吗?

b) Resque的哪个版本?

gem 'resque', '1.23.0'
gem 'resque-scheduler', :require => 'resque_scheduler'

c) 你重新启动了Resque工作程序的Rake任务吗? 没有,我使用了:


sudo service resque-workers start/stop

以下是脚本代码:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          resque-server
# Required-Start:    $network $named $remote_fs $syslog
# Required-Stop:     $network $named $remote_fs $syslog
# Default-Start:     2 3 4 5                                                                                                                               
# Default-Stop:      0 1 6                                                                                                                                 
### END INIT INFO                 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=`which rake`
DAEMON_ARGS='resque:work'
DESC="Resque workers script"
PWD=/webapps/noomii/offline/
test -x $DAEMON || exit 0

. /lib/lsb/init-functions

if [ ! -d /var/run/resque ]; then
        mkdir -p /var/run/resque
fi

start_resque() {
        start-stop-daemon --start  --quiet --chdir $PWD --chuid capistrano:capistrano --make-pidfile --background --pidfile /var/run/resque/rake.pid \
                --exec  $DAEMON $DAEMON_ARGS RAILS_ENV=production QUEUE=high,medium,low 
}

stop_resque() {
    start-stop-daemon --stop --oknodo  --pidfile /var/run/resque/rake.pid
}

status_resque() {
        status_of_proc -p "/var/run/resque/rake.pid" 
}

case "$1" in
    start)
  log_begin_msg "Starting $DESC"
  start_resque
  log_end_msg $?
  ;;
    stop)
  log_begin_msg "Stopping $DESC"
  stop_resque
  log_end_msg $?
  ;;
    status)
      status_resque
        ;;
    restart|force-reload)
  log_begin_msg "Restarting $DESC"
  stop_resque
  sleep 1
  start_resque
  log_end_msg $?
  ;;
    *)
  echo "Usage: $0 {start|stop|status|restart}" >&2
  exit 1
  ;;
esac

d) rake任务中指定的队列是否正确?

是的,它是正确的。


你能附上一些代码吗? :) - Viren
事实上,我不知道发布什么内容会有用。@Viren - content01
有几件事情需要注意:a)您是否正在使用resque_scheduler,如果是,请确保已经启动它;b)请确认您使用的是哪个版本的resque;c)请检查您是否重新启动了rake任务中的resque工作进程;d)请确认rake任务中指定的队列是否正确。 - Viren
哦,我看到你把 Rake 任务添加为脚本了,能不能也附上代码。最后一个问题,如果你正在使用 Resque.enqueue,为什么还要使用 resque_scheduler 呢? - Viren
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/37194/discussion-between-viren-and-content01 - Viren
显示剩余3条评论
2个回答

4

对于像我这样的任何n00bs,第一次在Heroku上设置Resque时,请确保在应用程序资源部分中添加一个Resque worker。

输入图像描述


3

好的,显然我的旧脚本不能正常工作。

我执行了以下命令:

rake resque:scheduler RAILS_ENV=production
QUEUE=high,aggregators bundle exec rake resque:work RAILS_ENV=production

然后一切都重新开始工作了 :)

非常感谢您的帮助,我知道这是一个新手问题 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接