即使执行了作业,Sidekiq统计也会停留在0的位置。

问题描述 投票:0回答:1

我有一个Rails 5应用程序,我刚刚安装了Sidekiq gem作为Rails ActiveJob的后端。

我的问题是,即使我成功地加入了一个作业并完成了它,所有的Sidekiq统计都停留在零。

我做了什么?

  1. 运行以下命令
$ brew update
$ brew install redis
$ brew services start redis
  1. 添加以下gemfiles
# Gemfile
gem 'sidekiq'
gem 'sidekiq-failures', '~> 1.0'
  1. 运行以下命令:
$ bundle install
$ bundle binstub sidekiq
  1. 修改以下文件
# config/application.rb
class Application < Rails::Application
  config.active_job.queue_adapter = :sidekiq
end
  1. 修改了监控器的路由(暂时不需要认证)。
# config/routes.rb
Rails.application.routes.draw do
  require "sidekiq/web"
  mount Sidekiq::Web => '/sidekiq'
end
  1. 添加了以下配置文件。
# config/sidekiq.yml
:concurrency: 3
:timeout: 60
:verbose: true
:queues:  # Queue priority: https://github.com/mperham/sidekiq/wiki/Advanced-Options
  - default
  - mailers
  1. 启动rails服务器,然后是sidekick,然后是rails控制台,在3个不同的标签页中。
$ rails s
$ sidekiq
$ rails c

8. 尝试使用 perform_later 在下面的测试工作中。

class TestCreateSnippetJob < ApplicationJob
  queue_as :default
  def perform(shop_domain = "shoes-lab.myshopify.com")
    puts "hello job"
    sleep 30
  end
end
$ TestCreateSnippetJob.perform_later

这是我得到的结果:

[1] pry(main)> TestCreateSnippetJob.perform_later
Enqueued TestCreateSnippetJob (Job ID: bc5bf654-09f5-4c77-95d8-8258a560525d) to Async(urgent)
=> #<TestCreateSnippetJob:0x00007feec140e9c8
 @arguments=[],
 @executions=0,
 @job_id="bc5bf654-09f5-4c77-95d8-8258a560525d",
 @priority=nil,
 @provider_job_id="a59c111d-ebe1-43b2-bf23-55748b660af8",
 @queue_name="urgent">
[2] pry(main)> Performing TestCreateSnippetJob (Job ID: bc5bf654-09f5-4c77-95d8-8258a560525d) from Async(urgent)
hello job
Performed TestCreateSnippetJob (Job ID: bc5bf654-09f5-4c77-95d8-8258a560525d) from Async(urgent) in 30038.27ms

我的问题是:即使TestCreateSnippetJob已经完成,监控rootsidekiq也没有显示任何 "已处理 "的作业。每个统计都停留在0。

此外,当我试图从任务中启动这个作业时,什么都没有发生,作业没有被执行,不像我试图直接从控制台启动它。

namespace :test do
  desc "TODO"
  task test: :environment do
    TestCreateSnippetJob.perform_later
    puts "Task done"
  end
end

你们知道我哪里做错了吗?

EDIT

似乎Rails(v5.2.3)覆盖了ActiveJob queue_adapter。正如 @Mike Perham 所说,我的日志显示我使用的是 :async 适配器,而不是 :sidekiq,即使我添加了 config.active_job.queue_adapter = :sidekiq 行至 config/application.rb.

所以我试着添加 config.active_job.queue_adapter = :sidekiqconfig/environments/development.rb and sidekiq work fine this time, the jobs are enqueued to Sidekiq. However, is the good practice do this way?

然而,这样做是一个好的做法吗?

PS:只有当我保持 config.active_job.queue_adapter = :sidekiq 一行 config/application.rb. config/environments/development.rb.

编辑2

在这两种情况下,无论我是否添加了 config.active_job.queue_adapter = :sidekiq 一行 config/environments/development.rb 除了同一句话之外,在 config/application.rb.,命令 $ Rails.application.config.active_job_queue_adapter 返回 :sidekiq

ruby-on-rails task jobs sidekiq monitor
1个回答
0
投票

您的日志显示您使用的是:async适配器,而不是:sidekiq。

Enqueued TestCreateSnippetJob (Job ID: bc5bf654...) to Async(urgent)
© www.soinside.com 2019 - 2024. All rights reserved.