【问题标题】:Sidekiq Stats are stuck at 0 even if jobs are performed即使执行作业,Sidekiq Stats 也会卡在 0
【发布时间】:2020-05-11 18:00:21
【问题描述】:

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

我的问题是,即使我设法将工作排入队列并完成它,所有 Sidekiq 统计数据都卡在零。

我做了什么:

  1. 运行以下命令:
$ brew update
$ brew install redis
$ brew services start redis
  1. 添加了以下 gemfile:
# 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. 在 3 个不同的选项卡中启动了 rails 服务器、sidekick 和 rails 控制台:
$ 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 已完成,监视器 root/sidekiq 也没有显示任何“已处理”作业。每个统计数据都停留在 0。

此外,当我尝试从任务启动此作业时,什么也没有发生,作业没有执行,这与我尝试直接从控制台启动它时不同。

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

你们知道我做错了什么吗?

编辑

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 = :sidekiq 添加到config/environments/development.rb 并且这次sidekiq 工作正常,作业被排入Sidekiq。

但是,以这种方式执行此操作是否是一种好习惯?

PS:只有当我将config.active_job.queue_adapter = :sidekiq 行保留在config/application.rb. config/environments/development.rb 中时,它才有效。

编辑 2

在这两种情况下,无论我是否在config/environments/development.rb 中添加config.active_job.queue_adapter = :sidekiq 行以及config/application.rb. 中的同一行,命令$ Rails.application.config.active_job_queue_adapter 都会返回:sidekiq

【问题讨论】:

    标签: ruby-on-rails task jobs sidekiq monitor


    【解决方案1】:

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

    Enqueued TestCreateSnippetJob (Job ID: bc5bf654...) to Async(urgent)
    

    【讨论】:

    • 感谢您的回复。根据您突出显示的内容,我编辑了我的初始帖子以尝试其他有效的方法。但我不认为这是最好的解决方案,它可能不是一个好的做法......你怎么看?
    猜你喜欢
    • 2013-10-15
    • 2023-03-04
    • 1970-01-01
    • 2021-04-20
    • 2014-05-15
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多