gpt4 book ai didi

ruby-on-rails - Sidekiq 作业已安排,未运行,只是消失了

转载 作者:可可西里 更新时间:2023-11-01 10:57:39 24 4
gpt4 key购买 nike

我正在开发一个使用 Sidekiq 和 Mandrill 在后台发送电子邮件的 Rails 应用程序。在我的应用程序中,我有 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 一起工作并且没有生产那么多的工作。

一些可能相关的代码:

生产.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

应用.rb

config.active_job.queue_adapter = :sidekiq

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

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

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

  • 尝试重新部署
  • 尝试重启 Sidekiq
  • 尝试重启 Redis
  • 尝试重新启动服务器本身
  • 尝试从控制台发送电子邮件 - 成功
  • 尝试使用 deliver_later(wait:1min) 发送电子邮件 - 不成功

最佳答案

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

关于ruby-on-rails - Sidekiq 作业已安排,未运行,只是消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38704696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com