我正在使用Sidekiq和Mandrill在後臺發送電子郵件的Rails應用程序。 在我的應用程序中,我有2個隊列,一個用於與我的服務進行用戶交互(不相關),另一個是郵件隊列。 郵寄者隊列由2個郵寄者使用:一個用於管理用戶配置文件,另一個用於與我們的服務進行交互(不相關)。Sidekiq工作計劃,沒有運行,只是消失
今天我注意到,除了由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中,然後消失。
我想確認電子郵件是唯一一個被髮送,因爲它沒有延遲,但我不知道爲什麼這是發生。
在我的分期環境中,一切都很好。不同之處在於它使用的是郵件陷阱,並沒有生產那麼多的工作。
一些代碼,可能是相關的:
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
還沒有發現任何與我的問題相關的其他鏈接。
- 嘗試重新部署
- 試圖重新啓動Sidekiq
- 試圖重新啓動Redis的
- 試圖重新啓動服務器本身
- 試圖從控制檯發送電子郵件 - 成功
- 嘗試發送電子郵件deliver_later(等待:1分鐘) - 不成功
今天我遇到類似的問題,我不確定這是否有幫助但你有沒有試過用這個命令啓動你的服務器? 'bundle exec sidekiq -q default -q mailers'https://github.com/mperham/sidekiq/wiki/Active-Job#action-mailer – sirramongabriel
@sirramongabriel yep – MaxDBN
你知道這個問題的根源嗎?我遇到了一個非常類似的問題。 –