Send mail every day

73 views
Skip to first unread message

Marco Dias

unread,
Jul 6, 2015, 10:51:58 AM7/6/15
to rubyonra...@googlegroups.com
Hi,


I need to implement a notification feature in my project. My user model has a daily, weekly and monthly booleans fields. I already have a UserMailer that sends mail when I create an account, or for password resetting.


What I want is my app to send a mail each day or week or month, depending on what the user chose.


So I've installed Whenever gem, and here is my schedule.rb :

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



My rake task :

desc "Send email to users"

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



My UserMailer :

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


The thing is, I don't know if I did right, and how can I test this, since I'm not in development ?

I did a crontab -l and I get this : 

# 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



If you could help me please 


Marco Dias

unread,
Jul 6, 2015, 2:46:58 PM7/6/15
to rubyonra...@googlegroups.com
Small update

I tried to run the command rake email_sender in my terminal, and I got this : 

[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--

So it sent mails to the only two users that had daily == true, so my method work. But is the scheduled job working ?

Hassan Schroeder

unread,
Jul 6, 2015, 2:56:42 PM7/6/15
to rubyonrails-talk
On Mon, Jul 6, 2015 at 11:46 AM, Marco Dias <dias...@gmail.com> wrote:

> So it sent mails to the only two users that had daily == true, so my method
> work. But is the scheduled job working ?

It's just a cron job. Change the target time to e.g. five minutes from
now, go get a cup of coffee and see what's happened when you get
back :-)

--
Hassan Schroeder ------------------------ hassan.s...@gmail.com
http://about.me/hassanschroeder
twitter: @hassan
Consulting Availability : Silicon Valley or remote

Marco Dias

unread,
Jul 7, 2015, 5:18:16 AM7/7/15
to rubyonra...@googlegroups.com
It doesn't seem to work in development mode. How can I do that ?

Marco Dias

unread,
Jul 7, 2015, 5:28:55 AM7/7/15
to rubyonra...@googlegroups.com
I did : whenever --update-crontab --set environment=development

And it worked in development, I could see in development.log that it sent the mail each 5 minutes. Good. Do I have to change this line and write environment=production or it'll work like this if the project is put on a server ?

Colin Law

unread,
Jul 7, 2015, 5:30:05 AM7/7/15
to rubyonra...@googlegroups.com
On 7 July 2015 at 10:18, Marco Dias <dias...@gmail.com> wrote:
> It doesn't seem to work in development mode. How can I do that ?

By specifying RAILS_ENV=development in your cron task instead of production.

Colin
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rubyonrails-talk/28aa9547-1925-4437-b709-74839a0386c1%40googlegroups.com.
>
> For more options, visit https://groups.google.com/d/optout.

Marco Dias

unread,
Jul 7, 2015, 5:32:41 AM7/7/15
to rubyonra...@googlegroups.com
Thanks, I updated my answer :

I did : whenever --update-crontab --set environment=development

And it worked in development, I could see in development.log that it sent the mail each 5 minutes. Good. Do I have to change this line and write environment=production or it'll work like this if the project is put on a server ?

Walter Lee Davis

unread,
Jul 7, 2015, 6:07:27 PM7/7/15
to rubyonra...@googlegroups.com
On Jul 7, 2015, at 5:32 AM, Marco Dias <dias...@gmail.com> wrote:

> Thanks, I updated my answer :
>
> I did : whenever --update-crontab --set environment=development
>
> And it worked in development, I could see in development.log that it sent the mail each 5 minutes. Good. Do I have to change this line and write environment=production or it'll work like this if the project is put on a server ?

You'll have to shell into the server and run the command on the server with the environment=production flag. Whenever makes a crontab entry for your job, and it has to do that in the actual crontab on the server, not on your dev machine.

Walter
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c3554d1b-146b-4cd6-a266-e0be74065466%40googlegroups.com.

Saeideh S.

unread,
Jan 20, 2016, 6:25:36 AM1/20/16
to rubyonra...@googlegroups.com
Hi I am from Iran S. I love Ruby One on Instagram and his goofy menu
fake page I just want a way to connect with Ruby Just once I want to
talk to me. You know how difficult the situation in Iran pleas pleas
pleas

--
Posted via http://www.ruby-forum.com/.

Colin Law

unread,
Jan 20, 2016, 6:46:28 AM1/20/16
to Ruby on Rails: Talk
On 20 January 2016 at 11:24, Saeideh S. <li...@ruby-forum.com> wrote:
> Hi I am from Iran S. I love Ruby One on Instagram and his goofy menu
> fake page I just want a way to connect with Ruby Just once I want to
> talk to me. You know how difficult the situation in Iran pleas pleas
> pleas

It is best to start a new thread for a new question, rather than
tagging it on the end of an old one. However, it is not clear exactly
what it is that you want.

Colin

>
> --
> Posted via http://www.ruby-forum.com/.
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/3884f6c4e4c616df69dd365ae79bea4d%40ruby-forum.com.

Dave Aronson

unread,
Jan 20, 2016, 7:06:35 AM1/20/16
to rubyonrails-talk
On Wed, Jan 20, 2016 at 6:44 AM, Colin Law <cla...@gmail.com> wrote:

> it is not clear exactly what it is that you want.

I Googled the object of Saeideh's desire, and at least on Instagram it
seems to be a fashion designer. So, I'm thinking the post was simply
spam, attracted by the name of our language. (That's why I'm not
repeating the Instagram account name here.)

-Dave

--
Dave Aronson, consulting software developer of Codosaur.us,
PullRequestRoulette.com, Blog.Codosaur.us, and Dare2XL.com.
Reply all
Reply to author
Forward
0 new messages