我正在尝试在单独的帖子中发送电子邮件(出于预算原因,我现在不想要resque等)。 当我在没有线程的情况下调用mail函数时发送电子邮件,但是当我将它包装在一个线程中时,没有发送电子邮件。
#Thread.new do
puts "hello1"
mail(to: "myemail@etc.etc", subject: "blah blah",body: some_var.text)
puts "hello2"
# end
所以这段代码可行,但是当我取消注释时,电子邮件不会被发送(但我看到“hello1 hello2”打印出来,我可以进入邮件功能,所以线程正在调用该函数并完成,但是没有发送邮件)。
我正在使用Rails 4.16,开发模式(Webrick从Rubymine运行)。
答案 0 :(得分:0)
如果它在邮件程序模型中
class MyMailer < ActionMailer::Base
def my_method
mail # ...
end
end
然后它没有发送电子邮件,因为您还需要在其上调用.deliver
,因此当您在线程中运行时,您不会返回mail
对象,但thread
- 主要问题。当你有类似的东西时,它可能会运行:
class MyMailer < ActionMailer::Base
def my_method
Thread.new do
mail().deliver # parameters to mail method as needed
end
end
end
答案 1 :(得分:0)
我尝试使用@ leszek-zalewski私有的解决方案,但它不适用于我。
我所做的是从模型中(我触发电子邮件操作的地方)我改变了它:
之前(在我的NotificationMailer&lt; ActionMailer :: Base中):
def login_email()
subject = 'New Login'
Thread.new do
mail(to: "XYZ", subject: subject).deliver
end
end
现在(在管理模型中):
def after_database_authentication
Thread.new do
NotificationMailer.login_email().deliver
end
end
我删除了NotificationMailer中的Thread.new块
然后你去!
我希望它有所帮助。
答案 2 :(得分:0)
您可以使用SuckerPunch后端的ActiveJob(rails 4.2中的库存和rails 4+的activejob_backport)在同一进程中执行作业