【问题标题】:Rails test a scheduled mail rake taskRails 测试一个预定的邮件 rake 任务
【发布时间】:2015-09-23 20:43:09
【问题描述】:

我有一个 rake 任务,应该每天向用户发送一封邮件,他们的日常字段 == true。 (我的项目中已经有一个正在运行的邮件实现,它在创建帐户和密码重置时发送邮件)。我正在使用Whenever gem

问题是,由于我不在生产中,我不知道如何测试它是否有效。

这是我的 UserMailer:

def daily_mail(user)
    @user = user
    mail to: user.email, subject: "Mail journalier"
end

我的耙子任务:

desc "向用户发送电子邮件"

task :email_sender => :environment do |_, args|
  User.find_each do |user|
    UserMailer.daily_mail(user).deliver if user.daily == true
  end
end

还有我的 schedule.rb :

every :day, :at => '12pm' do # Use any day of the week or :weekend, :weekday
  rake "email_sender"
end

我是在看教程后这样做的:

whenever --update-crontab store (and tried with --set too)

我尝试执行 crontab -l 并得到了这个:

# Begin Whenever generated tasks for: store

0 12 * * * /bin/bash -l -c 'cd /Users/Marco/Documents/TBProject && RAILS_ENV=production bundle exec rake email_sender --silent'

# End Whenever generated tasks for: store

# Begin Whenever generated tasks for: /Users/Marco/Documents/TBProject/config/schedule.rb

0 12 * * * /bin/bash -l -c 'cd /Users/Marco/Documents/TBProject && RAILS_ENV=production bundle exec rake email_sender --silent'

# End Whenever generated tasks for: /Users/Marco/Documents/TBProject/config/schedule.rb

他们是一种测试(或了解)我的任务是否适用于生产环境的方法吗?

更新:

我尝试运行“rake email_sender”,我在 development.log 中得到了这个:

[1m[36mUser Load (0.9ms)[0m  [1mSELECT  "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1000[0m
DEPRECATION WARNING: `#deliver` is deprecated and will be removed in Rails 5. Use `#deliver_now` to deliver immediately or `#deliver_later` to deliver through Active Job. (called from block (2 levels) in <top (required)> at /Users/Marco/Documents/TBProject/lib/tasks/rake1.rake:5)
  Rendered user_mailer/daily_mail.html.erb within layouts/mailer (1.2ms)
  Rendered user_mailer/daily_mail.text.erb within layouts/mailer (0.2ms)

UserMailer#daily_mail: processed outbound mail in 189.6ms

Sent mail to example@railstutorial.org (8.6ms)
Date: Mon, 06 Jul 2015 19:24:29 +0200
From: admin@fluxio.com
To: example@railstutorial.org
Message-ID: <559ab9cd79f6_193e3fc21dc6020412765@Marcos-MacBook-Air.local.mail>
Subject: Mail journalier
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_559ab9cd64da_193e3fc21dc6020412690";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_559ab9cd64da_193e3fc21dc6020412690
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

Daily Mail

----==_mimepart_559ab9cd64da_193e3fc21dc6020412690
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<html>
  <body>
    <h1>Daily Mail</h1>
  </body>
</html>

----==_mimepart_559ab9cd64da_193e3fc21dc6020412690--

DEPRECATION WARNING: `#deliver` is deprecated and will be removed in Rails 5. Use `#deliver_now` to deliver immediately or `#deliver_later` to deliver through Active Job. (called from block (2 levels) in <top (required)> at /Users/Marco/Documents/TBProject/lib/tasks/rake1.rake:5)
  Rendered user_mailer/daily_mail.html.erb within layouts/mailer (0.0ms)
  Rendered user_mailer/daily_mail.text.erb within layouts/mailer (0.0ms)

UserMailer#daily_mail: processed outbound mail in 15.2ms

Sent mail to test@test123.ch (2.7ms)
Date: Mon, 06 Jul 2015 19:24:29 +0200
From: admin@fluxio.com
To: test@test123.ch
Message-ID: <559ab9cdd27c_193e3fc21dc602041295@Marcos-MacBook-Air.local.mail>
Subject: Mail journalier
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_559ab9cdc753_193e3fc21dc60204128e8";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_559ab9cdc753_193e3fc21dc60204128e8
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

Daily Mail

----==_mimepart_559ab9cdc753_193e3fc21dc60204128e8
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<html>
  <body>
    <h1>Daily Mail</h1>
  </body>
</html>

----==_mimepart_559ab9cdc753_193e3fc21dc60204128e8--

所以它向仅有的两个用户发送了每天 == true 的邮件,所以我的方法有效。但是预定的工作有效吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 cron scheduled-tasks


    【解决方案1】:

    将 UserMailer 更改为

    def daily_mail(user)
        @user = user
        mail_to :user.email, subject: "Mail journalier"
    end
    

    【讨论】:

    • 我正在使用邮件:用于帐户激活,它可以工作
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2011-02-09
    相关资源
    最近更新 更多