Ruby on rails 4 ActionMailer,运动鞋,交付功能

Ruby on rails 4 ActionMailer,运动鞋,交付功能,ruby-on-rails-4,rabbitmq,sneakers,Ruby On Rails 4,Rabbitmq,Sneakers,我有下一个代码: # Gemfile gem 'sneakers' # application.rb config.active_job.queue_adapter = :sneakers # application_mailer.rb class ApplicationMailer < ActionMailer::Base ... def send_letter(params={}) mail(params) ... end end # my_mailer_co

我有下一个代码:

# Gemfile
gem 'sneakers'

# application.rb
config.active_job.queue_adapter = :sneakers

# application_mailer.rb
class ApplicationMailer < ActionMailer::Base
...
  def send_letter(params={})
    mail(params)
  ...
  end
end

# my_mailer_controller.rb
def send_my_mail
  ApplicationMailer.send_letter(params).deliver_later
end
但当我使用terminal命令运行ActiveJob worker时:

WORKERS=ActiveJob::QueueAdapters::SneakersAdapter::JobWrapper rake sneakers:run
什么也没发生。看起来没有启动具有正确类名的邮件侦听器,因此不会发送信件。在Rabbitmq UI跟踪器中,我看到消息事件的记录:

Node:         rabbit@ubuntu-trusty-64
Connection:   127.0.0.1:35834 -> 127.0.0.1:5672
Virtual host: /
User:         guest
Channel:      1
Exchange:     sneakers
Routing keys: [<<"mailers">>]
Routed queues: []
Properties:   [{<<"priority">>,signedint,0},
               {<<"delivery_mode">>,signedint,2},
               {<<"content_type">>,longstr,<<"application/octet-stream">>}]
Payload: 
{"job_class":"ActionMailer::DeliveryJob","job_id":"7a58ab27-d110-4e8b-911b-fe821735e1b7","queue_name":"mailers","arguments":["ApplicationMailer","send_newsletter","deliver_now",...
节点:rabbit@ubuntu-trusty-64
连接:127.0.0.1:35834->127.0.0.1:5672
虚拟主机:/
用户:来宾
频道:1
交换:运动鞋
路由密钥:[]
路由队列:[]
属性:[{,signedint,0},
{,签名,2},
{,longstr,}]
有效载荷:
{“作业类”:“ActionMailer::DeliveryJob”,“作业id”:“7a58ab27-d110-4e8b-911b-fe821735e1b7”,“队列名称”:“邮件”、“参数”:[“应用程序邮件”、“发送新闻稿”、“立即交付”,。。。
“以后交付”活动工作和运动鞋的正确工人名称是什么?
谢谢。

之所以发生这种情况,是因为
ActionMailer
使用
mailers
队列作为发送电子邮件的默认队列。请检查

默认情况下,运动鞋也使用
mailers
队列发送电子邮件。但名为
mailers
的队列中没有工作人员

可能的办法是:

  • mailers
    队列创建一个新工作人员,并手动完成所有工作
  • deliver\u later
    方法中明确定义队列,如下所示:

    ApplicationMailer.send_letter(params).deliver_later(queue: 'default')
    
  • 覆盖
    application.rb中
    ActionMailer
    的默认队列名称

    config.action_mailer.deliver_later_queue_name = 'default'
    
    然后像往常一样发送电子邮件:

    ApplicationMailer.send_letter(params).deliver_later
    
  • 希望这有帮助

    ApplicationMailer.send_letter(params).deliver_later