Send mail every day

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

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)

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 :slight_smile:

It doesn’t seem to work in development mode. How can I do that ?

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 ?

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

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 ?

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

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

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

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