【问题标题】:Why Sidekiq 4 does not work with mailer correctly?为什么 Sidekiq 4 不能正确使用邮件程序?
【发布时间】:2016-07-03 13:13:34
【问题描述】:

我正在用rails 4.2.5sidekiq 4.0.2sidekiq_mailer 0.0.8 编写项目。目前我正在开发一种异步发送电子邮件的功能。

所以,这是我的邮件:

class UserMailer < ActionMailer::Base
  include Sidekiq::Mailer

  sidekiq_options queue: 'mailer', backtrace: true

  default from: '<mail_from>'

  def one_c_client_problems_email(message)
    @message      = message
    email_subject = "SUBJ"

    mail(to: '<mail_to>', subject: email_subject)
  end
end

Sidekiq 初始化器:

require 'sidekiq'
require 'sidekiq/web'

Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
  [user, password] == ['<login>', '<pass>']
end

schedule_file = 'config/schedule.yml'

if File.exists?(schedule_file) && Sidekiq.server?
  Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
end

Sidekiq 配置文件:

---
:concurrency: 10
:pidfile: tmp/pids/sidekiq.pid
:logfile: log/sidekiq.log
:queues:
  - default
  - mailer

(我使用bundle exec sidekiq -C config/sidekiq.yml 命令启动sidekiq)

application.rb 中,sidekiq 被配置为默认的活动作业适配器:

config.active_job.queue_adapter = :sidekiq

当我尝试在没有 sidekiq 的情况下从 rails 控制台发送信件时:

UserMailer.one_c_client_problems_email('message').deliver!

有效!

当我尝试使用 sidekiq 发送异步电子邮件时:

UserMailer.one_c_client_problems_email('message').deliver

什么都没有发生...

附:定期作业可以正常工作,非邮件作业可以正常工作。 为什么它不工作?请帮忙!

Sidekiq UI 中没有队列:

但 UI 看到应该初始化的队列:

Sidekiq 日志为空(当我仅使用 sidekiq -q default -q mailers 运行 sidekiq 时,控制台输出也为空)。我在日志中看到的:

2016-03-17T09:26:33.926Z 1852 TID-ovlvb5ofs INFO: Booting Sidekiq 4.0.2 with redis options {:url=>nil}
2016-03-17T09:26:33.954Z 1852 TID-ovlvb5ofs INFO: Cron Jobs - add job with name: 1C Client. Update users to our db. Every hour
2016-03-17T09:26:33.956Z 1852 TID-ovlvb5ofs INFO: Cron Jobs - add job with name: Survey Reminder. Remind users about unfilled surveys. 9AM every day
2016-03-17T09:26:33.995Z 1852 TID-ovlvb5ofs INFO: Cron Jobs - add job with name: 1C Client. Update users to our db. Every hour
2016-03-17T09:26:33.997Z 1852 TID-ovlvb5ofs INFO: Cron Jobs - add job with name: Survey Reminder. Remind users about unfilled surveys. 9AM every day
2016-03-17T09:26:36.245Z 1852 TID-ovlvb5ofs INFO: Running in ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin15]
2016-03-17T09:26:36.245Z 1852 TID-ovlvb5ofs INFO: See LICENSE and the LGPL-3.0 for licensing details.
2016-03-17T09:26:36.245Z 1852 TID-ovlvb5ofs INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2016-03-17T09:26:36.245Z 1852 TID-ovlvb5ofs INFO: Starting processing, hit Ctrl-C to stop

为什么在日志中Booting Sidekiq 4.0.2 with redis options {:url=&gt;nil} Redis URL 是nil?为什么sidekiq 看不到redis?

【问题讨论】:

  • 您是否在您的应用中启用了 Sidekiq-UI?如果是,导航到 /sidekiq 或查看 ./logs/sidekiq.log 并检查是否找到任何堆栈跟踪
  • @Tilo 是的,UI 已启用。在 UI 上我看不到我的队列,我在 sidekiq.log 中看不到 sidekiq 看到任务...
  • 附上日志和屏幕

标签: ruby-on-rails ruby-on-rails-4 actionmailer sidekiq


【解决方案1】:

Gemfile 行中gem 'rspec-sidekiq' 应该在group :test 中。

此 gem 更改了 sidekiq 配置,并且与 Sidekiq 4.X.X 版本一起使用不好。

group :test do
  gem 'rspec-sidekiq'
end

但是我还是不知道为什么redis URL在日志里是nil...

另外,sidekiq 4.0.2 不需要 sidekiq_mailer gem 来进行异步邮件传递。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2019-07-23
    相关资源
    最近更新 更多