ruby-on-rails - 您如何在 Heroku 上安排 Resque 作业?
问题描述
rescue-scheduler
gem 安装说要为调度创建一个单独的 Rake 任务:
https://github.com/resque/resque-scheduler#rake-integration
namespace :resque do
task :setup_schedule => :setup do
...
task :scheduler => :setup_schedule
$ rake resque:scheduler
但是我的 HerokuProcfile
已经有一个工作进程来运行 Resque:
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=7 QUEUE=* bundle exec rake resque:work COUNT=1
我不想再创建另一个工作进程来运行预定的作业。这篇旧博客文章说您可以在不使用 Rake 任务的情况下进行设置。
https://www.perfectline.co/blog/2011/07/cron-tasks-for-your-rails-application-with-resque-2/
您如何在不使用 2 个工人测功机的情况下在 Heroku 上安排 Resque 作业?
我试图添加多个依赖项,但它给了我一个循环依赖错误。
namespace :resque do
task :setup => [:environment, :scheduler]
Console
>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
解决方案
这有效 https://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
推荐阅读
- angular - 更新到 Angular 9 后收到编译错误
- c++ - 还有另一种使用字符串流的方法吗?
- c# - Swashbuckle 中的选择加入路线
- powerbi - Power Bi - 开关和分组依据
- validation - Bootstrap 4 验证 - 检查是否至少填写了一个字段
- java - 如何更新向导页面上的控件?
- c# - '输入字符串的格式不正确。' 在使用程序集版本“1.0.0.*”时从 C# 中的 .NET 核心应用程序打开新窗口时
- javascript - 在 React 中保护你的路线的最佳选择是什么?
- python-3.x - WebDriver 使用数据打开 Chrome:,卡在地址栏上(Python Selenium)
- python - 我们可以在 Flask 中使用 Numba 吗?