Sidekiq 作业已安排,没有运行,只是消失了
Posted
技术标签:
【中文标题】Sidekiq 作业已安排,没有运行,只是消失了【英文标题】:Sidekiq job is scheduled, not running and just disappears 【发布时间】:2016-12-06 21:05:57 【问题描述】:我正在开发一个使用 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) 发送电子邮件 - 不成功【问题讨论】:
我今天遇到了类似的问题,我不确定这是否有帮助,但您是否尝试过使用此命令启动服务器? `bundle exec sidekiq -q default -q mailers' github.com/mperham/sidekiq/wiki/Active-Job#action-mailer @sirramongabriel 是的 你找出这个问题的根源了吗?我遇到了一个非常相似的问题。 不幸的是没有,但我怀疑这与服务器内存不足有关。当我增加内存时,该队列中应该发送的所有电子邮件都立即发送了......希望我早点知道。 【参考方案1】:我怀疑这与服务器内存不足有关。当我增加服务器上的内存和 postgres 上的 max_connections 参数时,该队列上应该发送的所有电子邮件都会立即发送
【讨论】:
以上是关于Sidekiq 作业已安排,没有运行,只是消失了的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 sidekiq 计划的 cron 作业没有在 heroku 上运行?