Sidekiq 作业已安排,而不是 运行,只是消失了

Sidekiq job is scheduled, not running and just disappears

我正在开发一个 Rails 应用程序,它使用 Sidekiq 和 Mandrill 在后台发送电子邮件。 在我的应用程序中,我有 2 个队列,一个用于用户与我的服务交互(无关),第二个是邮件队列。 邮件队列由 2 个邮件程序使用:一个用于管理用户配置文件,另一个用于与我们的服务交互(无关)。

今天我注意到除了 Devise 发送的确认电子邮件外,用户已经几天没有收到电子邮件了。

另一个队列工作正常,没有任何问题。 (所以也许 Sidekiq 配置不是问题)。

例如,让我们以通知用户个人资料更新成功的 UserMailer 为例:

user_mailer.rb

def update_user(user)
    @user = user
    mail(:to => user.email)
end

user_profile_controller.rb

  def update_resource(user)
    user.save
    UserMailer.update_user(user).deliver_later(wait: 1.minute)
  end

当我尝试使用 deliver_now 而不是 deliver_later 测试此功能时,它成功了并且邮件被发送了(因此与 Mandrill 的连接正常)。 当我按原样测试这个功能时,作业被添加到邮件队列中。当需要发送电子邮件时,它只是从队列中消失,没有发送电子邮件,也没有在日志中留下任何异常。

我可以看到它出现在 Sidekiq Web 中 UI 然后消失了。

我猜确认邮件是唯一发送的邮件,因为它没有延迟,但我不知道为什么会这样。

在我的暂存环境中一切都运行良好。不同之处在于它与 mailtrap 一起工作并且没有生产那么多的工作。

一些可能相关的代码:

production.rb

 config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :user_name => 'xxx',
      :password => Rails.application.secrets.smtp_password,
      :address => 'smtp.mandrillapp.com',
      :domain => config.app_domain,
      :port => 'xxx',
      :authentication => :login
  }
...
 config.action_mailer.default_url_options = { :host => config.app_domain, :protocol => 'https' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = false

application.rb

config.active_job.queue_adapter = :sidekiq

在没有任何解决方案的情况下浏览了这些链接:

http://guides.rubyonrails.org/active_job_basics.html http://api.rubyonrails.org/classes/ActionMailer/Base.html

没有找到与我的问题相关的任何其他链接。

我怀疑这与服务器内存不足有关。当我增加服务器上的内存和 postgres 上的 max_connections 参数时,该队列中所有本应发送的电子邮件都立即送达