我在后台使用rails应用程序发送电子邮件时遇到问题。如果我尝试在非背景情况下这样做,我能够成功发送相同的欢迎电子邮件。我正在heroku上测试这个应用程序并添加了heroku redis并在仪表板中启用了worker功能。我没有足够的经验与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
有什么建议吗?
答案 0 :(得分: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
这会将它排入邮件队列。没有额外的工作类,因为动作邮件将为您处理它。您只需要确保所有工作人员都被解雇并处理我认为需要遵循heroku特定文档设置的工作(我不使用heroku所以不完全确定这需要什么)。