Sneakers Rake 任务中的 ActionMailer
ActionMailer in Sneakers Rake Task
我正在 Rails 应用程序 Ruby 中整理一封电子邮件 scheduler/sender。我正在使用 Bunny gem for creating a messaging queue, and I have a Rufus scheduler that periodically puts messages into the queue. I am using a Sneakers rake 任务在添加消息时从队列中提取消息。我从命令行启动 Sneakers worker,如下所示:
WORKERS=Processor rake sneakers:run
代码到达 mail() 函数然后退出,甚至没有生成电子邮件模板。我的正常应用程序中有有效的电子邮件代码,我将配置转移到 rake 任务,所以我知道我的配置是正确的。
app/workers/processor.rb
require 'sneakers'
require 'json'
require 'action_mailer'
class Processor
include Sneakers::Worker
from_queue :email_queue,
:env => 'development',
:ack => true
Sneakers.configure {}
Sneakers.logger.level = Logger::ERROR
Sneakers::Worker.configure_logger(Logger.new('/dev/null'))
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
ack!
UserMailer.test_email(hash).deliver
end
end
app/mailer/user_mailer.rb
require 'action_mailer'
require 'fog'
require 'rubygems'
class UserMailer < ActionMailer::Base
def test_email(hash)
@order = hash["order"]
@currentUser = hash["user"]
@staffCompany = hash["company"]
mail(to: "some.email@gmail.com", from: "another.email@gmail.com", subject: 'Action Mailer')
end
end
app/views/user_mailer/test_email.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body>
<div class="PlainText">
Some text goes here
</div>
</body>
</html>
config/environments/development.rb
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'gmail account',
password: 'password',
authentication: 'plain',
enable_starttls_auto: true}
如有任何帮助,我们将不胜感激!
编辑 1:
已将模板移动到正确的位置,但模板仍未呈现且电子邮件未发送出去。
现在我已经从使用不断从队列中获取消息的 Sneakers worker 切换到使用队列中所有可用消息的计划 rake 任务。我不知道为什么 Action Mailer 在 Sneakers worker 和 Rake Task 中的表现如此不同,但这是一个不错的解决方法,并且有大量关于使用 Rufus 创建邮件 rake 任务的文档。如果有人有任何见解,请 post 因为我仍然很好奇如何让 Sneakers 工作人员使用 Action Mailer。
冒着恢复旧线程的风险,我在 Google 研究类似问题时遇到了这个问题。为了其他人的缘故,做同样的事情,这是一个短暂的想法。
我注意到在你的 worker 中你在调用 ack! 之后调用了 mailer。 The documentation(请参阅列表后的作业控制)说这打破了报告范式,因为工作人员的最后一行需要 return 某个值才能正确管理队列。我想知道你所看到的是否是它的副作用。
在您的 app/workers/processor.rb 中,尝试更改:
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
ack!
UserMailer.test_email(hash).deliver
end
收件人:
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
UserMailer.test_email(hash).deliver
ack!
end
我正在 Rails 应用程序 Ruby 中整理一封电子邮件 scheduler/sender。我正在使用 Bunny gem for creating a messaging queue, and I have a Rufus scheduler that periodically puts messages into the queue. I am using a Sneakers rake 任务在添加消息时从队列中提取消息。我从命令行启动 Sneakers worker,如下所示:
WORKERS=Processor rake sneakers:run
代码到达 mail() 函数然后退出,甚至没有生成电子邮件模板。我的正常应用程序中有有效的电子邮件代码,我将配置转移到 rake 任务,所以我知道我的配置是正确的。
app/workers/processor.rb
require 'sneakers'
require 'json'
require 'action_mailer'
class Processor
include Sneakers::Worker
from_queue :email_queue,
:env => 'development',
:ack => true
Sneakers.configure {}
Sneakers.logger.level = Logger::ERROR
Sneakers::Worker.configure_logger(Logger.new('/dev/null'))
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
ack!
UserMailer.test_email(hash).deliver
end
end
app/mailer/user_mailer.rb
require 'action_mailer'
require 'fog'
require 'rubygems'
class UserMailer < ActionMailer::Base
def test_email(hash)
@order = hash["order"]
@currentUser = hash["user"]
@staffCompany = hash["company"]
mail(to: "some.email@gmail.com", from: "another.email@gmail.com", subject: 'Action Mailer')
end
end
app/views/user_mailer/test_email.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body>
<div class="PlainText">
Some text goes here
</div>
</body>
</html>
config/environments/development.rb
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'gmail account',
password: 'password',
authentication: 'plain',
enable_starttls_auto: true}
如有任何帮助,我们将不胜感激!
编辑 1: 已将模板移动到正确的位置,但模板仍未呈现且电子邮件未发送出去。
现在我已经从使用不断从队列中获取消息的 Sneakers worker 切换到使用队列中所有可用消息的计划 rake 任务。我不知道为什么 Action Mailer 在 Sneakers worker 和 Rake Task 中的表现如此不同,但这是一个不错的解决方法,并且有大量关于使用 Rufus 创建邮件 rake 任务的文档。如果有人有任何见解,请 post 因为我仍然很好奇如何让 Sneakers 工作人员使用 Action Mailer。
冒着恢复旧线程的风险,我在 Google 研究类似问题时遇到了这个问题。为了其他人的缘故,做同样的事情,这是一个短暂的想法。
我注意到在你的 worker 中你在调用 ack! 之后调用了 mailer。 The documentation(请参阅列表后的作业控制)说这打破了报告范式,因为工作人员的最后一行需要 return 某个值才能正确管理队列。我想知道你所看到的是否是它的副作用。
在您的 app/workers/processor.rb 中,尝试更改:
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
ack!
UserMailer.test_email(hash).deliver
end
收件人:
def work(msg)
string = msg.force_encoding("ISO-8859-1")
hash = JSON.parse(string)
UserMailer.test_email(hash).deliver
ack!
end