如何在本地测试sidekiq-scheduler?

时间:2017-12-03 21:05:10

标签: ruby-on-rails scheduler sidekiq

我正在尝试将几个预定的工作人员添加到我的rails应用程序中。这些工作人员将按给定的时间间隔爬行不同的站点。

我想测试这些工人但不能这样做。我正在启动redis和我的应用程序。我该怎么做才能看到我的预定工作是否有效?

这是我的抓取工具类:

class AyedasCrawler
include Sidekiq::Worker

和我的sidekiq.yml是:

:schedule:
  ayedas_crawler:
    cron: '0 * * * * *'   # Runs once per minute
    class: AyedasCrawler

3 个答案:

答案 0 :(得分:0)

您还需要运行Sidekiq进程。

bundle exec sidekiq

它将同时启动工作程序和调度程序

答案 1 :(得分:0)

  • 通过运行来启动sidekiq worker和调度程序进程 在命令行中从应用程序根目录bundle exec sidekiqsidekiq

  • sidekiq-scheduler提供了对Sidekiq Web界面的扩展,该界面添加了“周期性作业”页面。 有两种方法可以做到这一点:

    1. 在您的route.rb文件中,require 'sidekiq/web'下方,添加require 'sidekiq-scheduler/web'
    2. 在您的config.ru中,require 'sidekiq/web'下方,添加

require 'sidekiq-scheduler/web' run Sidekiq::Web

在浏览器上,转到==> http://localhost:{port}/sidekiq/recurring-jobs{port}是应用程序运行所在的端口。

您将看到为您的应用程序安排的作业的列表以及有关它的其他一些详细信息。

在官方documentation

中了解更多信息

答案 2 :(得分:0)

如果您想使用 rspec 对其进行测试,您可以执行以下操作:

it 'spawns scheduled workers' do
  Sidekiq::Cron::Job.load_from_hash YAML.load_file('config/sidekiq.yml')[: schedule]
  Sidekiq::Cron::Job.all.each(&:enque!)
  expect(AyedasCrawler.jobs.size).to be(1)
end

它加载 YAML 配置,将所有作业入队,并断言作业是否已入队。

使用此方法,您可以验证您的计划 YAML 是否正确。它将测试 CRON 语法和预定间隔。

我还使用 https://github.com/philostler/rspec-sidekiq 来允许在不实际执行作业的情况下进行 sidekiq 测试。