我在后台的 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/