【问题标题】:Sidekiq jobs are getting Enqueued but it's not getting processed. All Jobs are stuck in EnqueuedSidekiq 作业正在排队,但没有得到处理。所有作业都卡在 Enqueued 中
【发布时间】:2022-01-31 12:54:03
【问题描述】:

我正在尝试使用 sidekiq 发送电子邮件,但它不起作用。这是我如何使用ActiveJob 设置sidekiq

宝石文件

gem 'sidekiq'

然后我运行bundle install

应用程序.rb

config.active_job.queue_adapter = :sidekiq
config.active_job.queue_name_prefix = Rails.env

UserMailer.rb

class UserMailer < ApplicationMailer
  def activation_needed_email(user)
    @user = user
    @url  = activate_user_url(@user.activation_token)
    mail(to: user.email, subject: 'Welcome to My website')
  end
end

用户控制器

def create
    ...
    if @user.save
      UserMailer.activation_needed_email(@user).deliver_later # this is were i am sending email.
    end
    ...
end

Rails 服务器日志

[ActiveJob] Enqueued ActionMailer::MailDeliveryJob (Job ID: e61df8eb-c6c1-417a-af59-d55fdc13ec98) to Sidekiq(mailers) with arguments: "UserMailer", "activation_needed_email", "deliver_now", {:args=>[#<GlobalID:0x00007fabff6a3c60 @uri=#<URI::GID gid://jobs-in-nepal/User/83c17355-db86-4ca1-b674-a97fde512592>>]}

根据上述日志文件,ActiveJob 已将作业排入队列,但它使用的是deliver_now 而不是deliver_later

我的邮箱中没有收到任何电子邮件。当我访问localhost:3000/sidekiq 时,我可以看到该作业已入队但未处理该作业。如何处理排队中的卡住作业?

更新:

我通过从application.rb 中删除以下行来解决问题

config.active_job.queue_name_prefix = Rails.env

看起来 sidekiq 对队列名称感到困惑。

【问题讨论】:

    标签: ruby-on-rails sidekiq rails-activejob


    【解决方案1】:

    我通过从application.rb 中删除以下行来解决问题

    config.active_job.queue_name_prefix = Rails.env
    

    然后通过sidekiq -q mailers启动sidekiq

    看起来 sidekiq 对队列名称感到困惑。

    【讨论】:

      【解决方案2】:

      您需要告诉 sidekiq 要处理哪些队列。默认情况下,一些框架有自己的队列名称。

      创建一个sidekiq 配置文件(例如config/sidekiq.yml)并定义它应该使用的队列

      ---
      :verbose: false
      :concurrency: 2
      :max_retries: 3
      :timeout: 10
      
      :queues:
        # The default queue for all application jobs that don't have a specific queue.
        - default
      
        # The default queue for ActionMailer classes.
        - mailers
      
        # ActionMailbox queues. See `ActionMailbox.queues`.
        - action_mailbox_routing
        - action_mailbox_incineration
      
        # ActiveStorage queues. See `ActiveStorage.queues`.
        - active_storage_analysis
        - active_storage_purge
      

      然后用配置启动sidekiq:sidekiq -C config/sidekiq.yml

      【讨论】:

      • 我添加了sidekiq.yml 文件,但我仍然有同样的问题。 Create 操作仍需要 5 秒以上才能完成。并且作业仍然停留在排队但未处理。但是有些我仍然在我的邮箱中收到电子邮件。
      • include Sidekiq::Worker 是否在工作中?
      • 不,我还没有 include Sidekiq::Worker 在活跃的工作中。如何include Sidekiq::Worker 在职?我需要创建新工人吗?如果是,那么我的 perform 方法会是什么样子?
      • 只要把它放在例如进入你的ApplicationJob。不确定这是否有帮助,因为我从来没有遇到过你的问题,但是我使用上面的配置设置加上 Sidekiq::Worker 的包含做了它应该做的事情。
      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 2013-06-16
      • 2015-07-03
      • 2018-06-29
      • 1970-01-01
      • 2014-12-03
      • 2018-09-27
      • 2013-12-26
      相关资源
      最近更新 更多