你如何在 Heroku 上安排 Resque 作业?

编程入门 行业动态 更新时间:2024-10-27 22:34:29
本文介绍了你如何在 Heroku 上安排 Resque 作业?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

rescue-scheduler gem 安装说要创建一个单独的 Rake 任务进行调度:

The rescue-scheduler gem installation says to create a separate Rake task for scheduling:

github/resque/resque-scheduler#rake-integration

namespace :resque do task :setup_schedule => :setup do ... task :scheduler => :setup_schedule $ rake resque:scheduler

但是我的 Heroku Procfile 已经有一个工作进程来运行 Resque:

However my Heroku Procfile already has a worker process to run Resque:

resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=7 QUEUE=* bundle exec rake resque:work COUNT=1

我不想创建另一个工作进程只是为了运行预定的作业.这篇旧博文说你可以在不使用 Rake 任务的情况下进行设置.

I don't want to create yet another worker process just to run scheduled jobs. This old blog posts says you can set it up without using Rake tasks.

www.perfectline.co/blog/2011/07/cron-tasks-for-your-rails-application-with-resque-2/

我尝试添加多个依赖项,但它给了我一个循环依赖项错误.

I tried to add multiple dependencies but it gave me a circular dependency error.

namespace :resque do task :setup => [:environment, :scheduler]

控制台

>env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=7 QUEUE=* bundle exec rake resque:work COUNT=1 rake aborted! Circular dependency detected: TOP => resque:work => resque:preload => resque:setup => resque:scheduler => resque:setup_schedule => resque:setup Tasks: TOP => resque:work => resque:preload => resque:setup => resque:scheduler => resque:setup_schedule

推荐答案

这有效grosser.it/2012/04/14/resque-scheduler-on-heroku-without-extra-workers/

require 'resque/tasks' require 'resque/scheduler/tasks' namespace :resque do desc "schedule and work, so we only need 1 dyno" task :schedule_and_work do if Process.respond_to? :fork if Process.fork sh "rake environment resque:work" else sh "rake resque:scheduler" Process.wait end else # windows pid = Process.spawn "rake environment resque:work" Rake::Task["resque:scheduler"].invoke Process.wait pid end end task :setup => :environment task :setup_schedule => :setup do require 'resque-scheduler' # The schedule doesn't need to be stored in a YAML, it just needs to # be a hash. YAML is usually the easiest. # Resque.schedule = YAML.load_file('your_resque_schedule.yml') Resque.schedule = {merit_rules: {every: '1m', class: 'Merit::ReputationChangeObserver', queue: :badge_queue, description: 'This job runs Merit\'s rules to award badges.'}} end task :scheduler => :setup_schedule end

并启动它

env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=7 QUEUE=* bundle exec rake resque:schedule_and_work COUNT=1

更多推荐

你如何在 Heroku 上安排 Resque 作业?

本文发布于:2023-10-16 05:13:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1496597.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作业   如何在   Heroku   Resque

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!