ruby-on-rails - Rails 不使用 Heroku Redis 在后台发送电子邮件

标签 ruby-on-rails heroku background redis sidekiq

我在后台的 Rails 应用程序中发送电子邮件时遇到问题。如果我尝试在非后台情况下发送相同的欢迎电子邮件,我能够成功发送。我正在 heroku 上测试这个应用程序并添加了 heroku redis 并在仪表板中启用了工作人员功能。我没有足够的使用 redis 或 sidekiq 的经验来自己解决这个问题。寻找有关如何解决此问题的建议。

这是我的 Devise Registrations Controller 中的命令:

class RegistrationsController < Devise::RegistrationsController

  def create
    super
    if @user.persisted?
      WelcomeEmailJob.perform_later(current_user.id)
    end
  end
end

后台作业代码:

class WelcomeEmailJob < ActiveJob::Base
  queue_as :default

  def perform(user_id)
    user = User.find(user_id)
    WelcomeMailer.welcome_email(user).deliver       
  end
end

欢迎邮件:

class WelcomeMailer < ApplicationMailer
 def welcome_email(user)
    @user = user
    @url  = 'http://example.com/login'
    mail(to: @user.email, subject: 'Welcome to My Website')
  end
end

我一直在 heroku 日志中看到类似这样的响应

2016-04-20T00:11:25+00:00 app[heroku-redis]: source=REDIS sample#active-connections=1 sample#load-avg-1m=0.09 sample#load-avg-5m=0.125 sample#load-avg-15m=0.12 sample#read-iops=0 sample#write-iops=0.020492 sample#memory-total=15405632.0kB sample#memory-free=13388156.0kB sample#memory-cached=493144kB sample#memory-redis=295880bytes sample#hit-rate=1 sample#evicted-keys=0

有什么建议吗?

最佳答案

你是如何触发工作的?你有一个cron作业设置吗?如果您使用的是最新版本的 Rails,则 deliver 也已被弃用并替换为 deliver_now。

尝试:

class RegistrationsController < Devise::RegistrationsController

  def create
    super
    if @user.persisted?
      WelcomeMailer.welcome_email(user).deliver_later
    end
  end
end

这会将它排入邮件队列。不需要额外的工作类,因为 action mailer 会为您处理。你只需要确保你所有的 worker 都被解雇并处理我认为需要遵循 heroku 特定文档来设置的工作(我不使用 heroku 所以不完全确定这需要什么)。

关于ruby-on-rails - Rails 不使用 Heroku Redis 在后台发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731644/

相关文章:

ruby-on-rails - 无法创建自引用错误

ruby-on-rails - Rails 中的架构可以动态更改吗?

postgresql - 将本地 PostgreSQL 数据库推送到远程 Heroku 服务器

python - 此错误消息 {"error": {"id" :"unauthorized" ,"message" :"Invalid credentials provided."}} when I click on Heroku Postgres

ruby-on-rails - 如何将图像存储在我的 heroku postgres 数据库中

ios - 如何在 Swift 中向 UICollectionViewCell 添加背景图像?

iphone - 如何在 iOS 终止应用程序之前在过期处理程序中优雅地结束任务?

ruby-on-rails - 长期运行的 Sidekiq 工作不断消亡

java - 将图像放置在 jmenubar + jtoolbar 中

ruby-on-rails - 在不更改时间的情况下在时区之间转换时间?