收到 'Use MyMailer.delay.mailer_action(args) to delay sending of emails.' 错误
Getting 'Use MyMailer.delay.mailer_action(args) to delay sending of emails.' error
我收到一个奇怪的错误:'Use MyMailer.delay.mailer_action(args) to delay sending of emails.' 但我似乎可以找出它的来源:
app/mailers/user_notifier.rb
class UserNotifier < ActionMailer::Base
default from: "test@testing.com"
def signup_email(user)
@user = user
mail(to: @user.email, subject: t("mailer.signup.subject"))
end
...
end
在控制台中,非延迟的工作:
UserNotifier.signup_email(user).deliver
但是添加延迟时,出现错误:
UserNotifier.signup_email(user).delay.deliver
Rendered user_notifier/signup_email.html.erb (0.7ms)
RuntimeError: Use MyMailer.delay.mailer_action(args) to delay sending of emails.
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/delayed_job-4.0.6/lib/delayed/performable_mailer.rb:20:in `delay'
from (irb):6
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
它以前可以用,但有时会坏掉。仍然没有得到我的头周围。任何想法将不胜感激!谢谢。
我觉得你搞反了:
UserNotifier.signup_email(user).delay.deliver
应该是
UserNotifier.delay.signup_email(user)
当您使用 Delayed_job 时,您可以访问 .dealy
方法,然后您可以使用 .deliver_later
等操作邮件程序方法来延迟发送电子邮件。
在您的项目中添加 delayed_job 的简单方法:
在您的 Gemfile 中添加:
gem "delayed_job_active_record"
gem "daemons"
使用以下内容创建文件 "config/initializers/delayed_job_config.rb":
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 3
Delayed::Worker.max_run_time = 5.minutes
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'
Delayed::Worker.delay_jobs = !Rails.env.test?
Delayed::Worker.raise_signal_exceptions = :term
Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
在终端中:
$ bin/rails generate delayed_job:active_record
$ bin/rake db:migrate
$ bundle
$ bin/delayed_job start
可选择查看日志:tail -f log/delayed_job.log
在你项目的一些Mailer中(你可以在rails控制台中执行):
SomeMailer.delay.some_method
您的队列将在 60 秒内得到处理。您可以删除 属性 Delayed::Worker.sleep_delay = 60
以立即处理。
否则,您可以将您的应用程序配置为使用 delayed_job,就像您的适配器一样,用于活动作业和进程在后台运行。然后你需要输入config.active_job.queue_adapter = :delayed_job
。这种模式总是你发送一封电子邮件,你不需要使用 .delay
,而是调用邮件操作和 .deliver_later
,例如:MyMailer.your_method.deliver_later
。在此模式下,活动作业会将电子邮件排入 delayed_job 队列。
欢迎提出问题和建议。
我收到一个奇怪的错误:'Use MyMailer.delay.mailer_action(args) to delay sending of emails.' 但我似乎可以找出它的来源:
app/mailers/user_notifier.rb
class UserNotifier < ActionMailer::Base
default from: "test@testing.com"
def signup_email(user)
@user = user
mail(to: @user.email, subject: t("mailer.signup.subject"))
end
...
end
在控制台中,非延迟的工作:
UserNotifier.signup_email(user).deliver
但是添加延迟时,出现错误:
UserNotifier.signup_email(user).delay.deliver
Rendered user_notifier/signup_email.html.erb (0.7ms)
RuntimeError: Use MyMailer.delay.mailer_action(args) to delay sending of emails.
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/delayed_job-4.0.6/lib/delayed/performable_mailer.rb:20:in `delay'
from (irb):6
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /Users/quindici/.rvm/gems/ruby-2.1.2/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
它以前可以用,但有时会坏掉。仍然没有得到我的头周围。任何想法将不胜感激!谢谢。
我觉得你搞反了:
UserNotifier.signup_email(user).delay.deliver
应该是
UserNotifier.delay.signup_email(user)
当您使用 Delayed_job 时,您可以访问 .dealy
方法,然后您可以使用 .deliver_later
等操作邮件程序方法来延迟发送电子邮件。
在您的项目中添加 delayed_job 的简单方法:
在您的 Gemfile 中添加:
gem "delayed_job_active_record"
gem "daemons"
使用以下内容创建文件 "config/initializers/delayed_job_config.rb":
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 3
Delayed::Worker.max_run_time = 5.minutes
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'
Delayed::Worker.delay_jobs = !Rails.env.test?
Delayed::Worker.raise_signal_exceptions = :term
Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
在终端中:
$ bin/rails generate delayed_job:active_record
$ bin/rake db:migrate
$ bundle
$ bin/delayed_job start
可选择查看日志:tail -f log/delayed_job.log
在你项目的一些Mailer中(你可以在rails控制台中执行):
SomeMailer.delay.some_method
您的队列将在 60 秒内得到处理。您可以删除 属性 Delayed::Worker.sleep_delay = 60
以立即处理。
否则,您可以将您的应用程序配置为使用 delayed_job,就像您的适配器一样,用于活动作业和进程在后台运行。然后你需要输入config.active_job.queue_adapter = :delayed_job
。这种模式总是你发送一封电子邮件,你不需要使用 .delay
,而是调用邮件操作和 .deliver_later
,例如:MyMailer.your_method.deliver_later
。在此模式下,活动作业会将电子邮件排入 delayed_job 队列。
欢迎提出问题和建议。