Sidekiq和rails 4 actionmailer永远不会发送电子邮件

Joh*_*Del 12 ruby ruby-on-rails actionmailer sidekiq

我在rails 4应用程序中设置了sidekiq,用于发送电子邮件和处理后台作业.我还设计了我使用devise_async和典型的联系表单电子邮件.我正在使用Gmail发送电子邮件.

如果我删除sidekiq,它通常通过gmail(设计和联系表单)发送电子邮件,但是当我启用它时,它不起作用(devise_async既不是联系表单也不是).Sidekiq显示后台作业开始并成功完成(我也通过sinatra应用程序看到它们已被处理)但电子邮件从未发送过.

在开发过程中,控制台显示发送的电子邮件(使用devise_async和联系表单,因为它们已成功处理sidekiq).

我已经尝试过的:

  • 我为sidekiq的rails4添加了github分支(我也尝过了主人)
  • 我已经更新并检查redis版本是否大于2.4(它是2.6.14)
  • 我正在运行sidekiq bundle exec sidekiq

但没有任何效果.我使用的是ruby 2.0.0-p247.

我还在这个应用程序中使用sidekiq设置图像处理,并且在开发和生产中都能很好地工作.

我没有做任何花哨的事情,但我正在添加完成代码:

我的邮件代码:

  def send_message
   @message = Message.new(message_params)
   if @message.save
     ContactMailer.delay.contact_form(@message.id)
   end
 end
Run Code Online (Sandbox Code Playgroud)

我的邮件:

  def contact_form(message_id)
    message = Message.where(id: message_id).first
    @email = message.email
    @message = message.text
    mail(to: "myemail@gmail.com", subject: "Message from contact form")
  end
Run Code Online (Sandbox Code Playgroud)

和我的生产配置(它没有sidekiq工作):

  config.action_mailer.delivery_method = :smtp
  ActionMailer::Base.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => "gmail.com",
    :authentication       => "plain",
    :enable_starttls_auto => true,
    :user_name            => "myusername",
    :password             => "mypassword"
  }
  config.action_mailer.default_url_options = { :host => "mydomain.com" }
Run Code Online (Sandbox Code Playgroud)

这里有一个典型的sidekiq队列:

    /home/john/.rvm/gems/ruby-2.0.0-p247@cluey/bundler/gems/sidekiq-4ed6eba8aff1/lib/sidekiq/rails.rb:14: warning: toplevel constant Queue referenced by Sidekiq::Client::Queue
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Booting Sidekiq 2.5.2 with Redis at redis://localhost:6379/0
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Running in ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: See LICENSE and the LGPL-3.0 for licensing details.
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Starting processing, hit Ctrl-C to stop
    2013-07-19T09:48:11Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: start
    2013-07-19T09:48:12Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: done: 1.214 sec
    2013-07-19T09:48:50Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: start
2013-07-19T09:48:51Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: done: 0.143 sec
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: start
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: done: 0.152 sec
Run Code Online (Sandbox Code Playgroud)

我认为它与actionmailer和sidekiq有关,但我不知道如何调试,一切似乎都有效但电子邮件从未发送过.

Joh*_*Del 17

我找到了,你必须像这样运行sidekiq:

RAILS_ENV=production bundle exec sidekiq -D
Run Code Online (Sandbox Code Playgroud)

在生产中运行.这与资产预编译的问题相同.