我有一段运行某个方法的代码,我已经把该方法放在self中。
class StartWorker
@queue = :worker
def self.perform
puts "hello"
Parser.find_all_by_class_name("Parser").first.sites.each do |s|
site = Site.find(s.id)
parser = Parser.new(site)
parser.run
end
end
end
如果我评论 def self.execute 并结束并运行该文件,它会正确显示所需的结果,但是当我尝试通过取消注释将其作为后台任务时,它静默地失败到没有显示任何内容的 resque 面板中,并且在命令提示符下也没有输出
我正在从我的 resque_schedule.yml 内的 resque-scheduler 排队
start_worker:
cron: "55 6 * * *"
class: StartWorker
queue: worker
args:
description: "This job starts all the worker jobs"
我尝试在def self.perform方法中放置一些简单的放置语句,以检查控件是否在方法内部传递,但似乎控件甚至没有在self.perform方法中传递
我也尝试加载轨道环境并要求在其中重新设置,但没有用在进行任何更改之前,我已经为上述所有内容运行了捆绑执行耙 resque:work QUEUE='*' 脚本
我尝试在 rails 控制台内 Resque.info 它显示为这样,
{:working=>0, :queues=>1, :failed=>1, :environment=>"development", :servers=>["redis://localhost:6379/0"], :pending=>0, :processed=>1, :workers=>1}
任何想法如何克服这一点?
- 您是否检查过 resque-web 面板以查看失败的工作是什么?
- 确保在进行任何更改后重新启动工作线程。
- 如果您在任何地方(特别是日志/worker.log或您的登录位置)的日志中都没有看到"hello",那么该功能根本没有发生。
-
bundle exec rake resque:work QUEUE='*'
应该bundle exec rake resque:work QUEUE=*
,以防万一您确实引用了通配符。
为我工作:
Resque::Scheduler.configure do |c|
c.verbose = Rails.env.development? # or just true
end
红宝石: 3.0.3
,风格: 2.2.0
,Resque-Scheduler 4.5.0
,导轨:6.1.4.4