如何在rake任务中包含ActionMailer类?

Joy*_*Joy 11 ruby ruby-on-rails actionmailer rake-task

我想在我的rake任务中使用ActionMailer,以便在特定时间向人们发送电子邮件.

我在app/mailers文件夹中编写了一个邮件程序类,如下所示:

class AlertsMailer < ActionMailer::Base
  default from: 'x@y.com'

  def mail_alert(email_addresses, subject, url)
    @url  = '#{url}'
    mail(to: email_addresses, subject: 'Alert') do |format|
      format.html { render '/alerts/list' }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我在rake任务中包含以下行:

AlertsMailer.mail_alert(email_addresses, subject)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行rake任务时:

rake update_db
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

uninitialized constant AlertsMailer
Run Code Online (Sandbox Code Playgroud)

我想我必须以某种方式在我的rake任务中加载邮件程序类,但我不知道如何做到这一点.

请帮忙.

Abd*_*bdo 9

我有以下内容,它正在工作:

# in lib/tasks/mailme.rake
task :mailme => :environment do
  UserMailer.test_email(1).deliver
end
Run Code Online (Sandbox Code Playgroud)

# in app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
  def test_email(user_id)
    @user = User.find_by_id user_id

    if (@user)
      to = @user.email

      mail(:to => to, :subject => "test email", :from => "default_sender@foo.bar") do |format|
        format.text(:content_type => "text/plain", :charset => "UTF-8", :content_transfer_encoding => "7bit")
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)


Dir*_*nry 8

从你的标签,我相信你正在使用Rails.

您可以通过要求依赖于环境任务来加载Rails环境,如下所示:

task :my_task => :environment do
    ...
end
Run Code Online (Sandbox Code Playgroud)

代替

task :my_task do
    ...
end
Run Code Online (Sandbox Code Playgroud)

如果有帮助,请告诉我.