Rails 4-如何通过delay_job发送类似新闻通讯的电子邮件?

用户名

我想每天早上将新清单的摘要发送给我们的用户。用Ruby On Rails 4,ActiveRecord(使用SendGrid)和延迟作业来做到这一点的最佳方法是什么?

我目前正在这样做:

在控制器中:

def yesterday_listings_for_users
    yesterday_listings = Listings.where('status = "0" AND (DATE(created_at) = ?)', Date.today - 1)
    if yesterday_listings.count > 0
      NotificationMailer.delay.yesterday_listings_for_users_notification
    end  
    render :nothing => true
  end

然后在邮件中:

  def yesterday_listings_for_users_notification
    @listings = Listing.where('status = "0" AND (DATE(created_at) = ?)', Date.today-1)

    mail(to: '[email protected]', subject: "Latest Listings", from: '[email protected]')            
  end

使用CRON作业后,每天早上都会通过我的电子邮件地址向我发送报告。我的数据库中有数百名用户,我也想向他们发送此电子邮件。

怎么做?我想知道这样的事情:

  def yesterday_listings_for_users_notification
    @listings = Listing.where('status = "0" AND (DATE(created_at) = ?)', Date.today-1)
    Users.all.each do |user|
      mail(to: user.email, subject: "Latest Listings", from: '[email protected]')          
    end
  end

但是,是否建议(或适当地)遍历数据库中的数百条记录并以延迟的邮件程序方法发送数百封电子邮件?

有更好的方法吗?

先感谢您!

我们

我通常更喜欢与Sidekiq一起使用,Sidetiq但是如果您想使用,delayed_job我建议您使用whenevergem来简化操作。

每当有Ruby gem时,它都会为编写和部署cron作业提供清晰的语法。

  1. 添加gem 'whenever'到您的gemfile
  2. 运行wheneverize .将生成文件的命令config/schedule.rb
  3. 在您config/schedule.rb执行以下操作。

    every 1.day, :at => '11:30 am' do
      runner "User.delay.send_daily_newsletter"
    end
    
  4. 在您user.rb定义方法send_daily_newsletter并使用find_each而不是all.each(批处理)

    def self.send_daily_newsletter
      listings = Listing.where('status = "0" AND (DATE(created_at) = ?)', Date.today - 1).select(:title).to_json
      User.select(:id, :email).find_each do |u|
        NotificationMailer.delay.send_daily_newsletter(u.email, listings)
      end
     end
    
  5. 在你的notification_mailer.rb定义send_daily_newletter

    def send_daily_newsletter(user_email, listings)
      @listings = listings
      mail(to: user_email, subject: "Latest Listings", from: '[email protected]')
    end
    

这样,您将有一个延迟的工作来获得所有用户并使用单独的工作人员发送每封电子邮件,这是完成此任务的最佳方法。

注意:不要忘记更改排名的方法,从您的视图,例如,listing.titlelisting[:title]因为我们传递的清单作为json

如果您不想json每次都将它们传递给每个延迟的任务,只需将列表缓存在其中,Rails.cache并在完成发送后将其清除。

编辑:

如果您由于在delayed_jobgem中遇到问题而要使用缓存方法,请send_daily_newsletter在邮件程序中编辑该方法。(这就是为什么我会选择基于redisSidekiq而不是基于mysql的原因delayed_job

    def send_daily_newsletter(user_email)
      @listings = Rails.cache.fetch('today_listings') { Listing.where('status = "0" AND (DATE(created_at) = ?)', Date.today - 1) }
      mail(to: user_email, subject: "Latest Listings", from: '[email protected]')
    end

在你的 user.rb

     def self.send_daily_newsletter
      User.select(:id, :email).find_each do |u|
        NotificationMailer.delay.send_daily_newsletter(u.email)
      end
      Rails.cache.clear('today_listings')
     end

祝你好运。我已经做这些电子邮件新闻通讯已有一段时间了,他们真的很痛苦:D

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

delay_job耙工作:工作rails 4不发送邮件

来自分类Dev

Rails-异步发送所有带有delay_job的电子邮件

来自分类Dev

Rails-异步发送所有带有delay_job的电子邮件

来自分类Dev

在发送Rails之前保存每封电子邮件4

来自分类Dev

Rails 4 Mailer不发送电子邮件

来自分类Dev

Rails 4,不使用sendmail发送电子邮件

来自分类Dev

在发送Rails之前保存每封电子邮件4

来自分类Dev

Rails 4-邪恶的pdf文件通过电子邮件发送

来自分类Dev

通过电子邮件激活,Ruby on Rails 4

来自分类Dev

Rails 4:如何在电子邮件中发送解码的HTML?

来自分类Dev

Rails4-如何从名称添加到我的Rails应用发送的电子邮件中?

来自分类Dev

发送带有Rails 4,邮件表单和Ajax的电子邮件?

来自分类Dev

Ruby on Rails 4中的“ NameError:未初始化的常量新闻通讯”,但未在开发中

来自分类Dev

如何在ASP.NET中异步发送新闻通讯(批量电子邮件)

来自分类Dev

Rails 4:通过操作邮件程序获取QRCode以在电子邮件中显示

来自分类Dev

Sidekiq和Rails 4 Actionmailer从不发送电子邮件

来自分类Dev

Rails 4 ActionMailer发送带有名称的电子邮件无法正常工作

来自分类Dev

Rails 4 ActionMailer发送带有名称的电子邮件无法正常工作

来自分类Dev

在Heroku上使用Rails4发送电子邮件

来自分类Dev

Rails 4向其他用户发送电子邮件

来自分类Dev

Rails 4验证电子邮件中特定域的存在

来自分类Dev

rails 4 devise确认表单允许空白电子邮件

来自分类Dev

Rails 4电子邮件在生产中的预览

来自分类Dev

借助Sidekiq,Rails 4可以安排日程电子邮件

来自分类Dev

Rails 4:如何防止已登录的用户在结帐时估算电子邮件?

来自分类Dev

使用codeigniter向所有新闻通讯成员发送电子邮件

来自分类Dev

使用codeigniter向所有新闻通讯成员发送电子邮件

来自分类Dev

Rails 4-Yandex邮件未发送

来自分类Dev

联系表格邮件在Rails 4

Related 相关文章

  1. 1

    delay_job耙工作:工作rails 4不发送邮件

  2. 2

    Rails-异步发送所有带有delay_job的电子邮件

  3. 3

    Rails-异步发送所有带有delay_job的电子邮件

  4. 4

    在发送Rails之前保存每封电子邮件4

  5. 5

    Rails 4 Mailer不发送电子邮件

  6. 6

    Rails 4,不使用sendmail发送电子邮件

  7. 7

    在发送Rails之前保存每封电子邮件4

  8. 8

    Rails 4-邪恶的pdf文件通过电子邮件发送

  9. 9

    通过电子邮件激活,Ruby on Rails 4

  10. 10

    Rails 4:如何在电子邮件中发送解码的HTML?

  11. 11

    Rails4-如何从名称添加到我的Rails应用发送的电子邮件中?

  12. 12

    发送带有Rails 4,邮件表单和Ajax的电子邮件?

  13. 13

    Ruby on Rails 4中的“ NameError:未初始化的常量新闻通讯”,但未在开发中

  14. 14

    如何在ASP.NET中异步发送新闻通讯(批量电子邮件)

  15. 15

    Rails 4:通过操作邮件程序获取QRCode以在电子邮件中显示

  16. 16

    Sidekiq和Rails 4 Actionmailer从不发送电子邮件

  17. 17

    Rails 4 ActionMailer发送带有名称的电子邮件无法正常工作

  18. 18

    Rails 4 ActionMailer发送带有名称的电子邮件无法正常工作

  19. 19

    在Heroku上使用Rails4发送电子邮件

  20. 20

    Rails 4向其他用户发送电子邮件

  21. 21

    Rails 4验证电子邮件中特定域的存在

  22. 22

    rails 4 devise确认表单允许空白电子邮件

  23. 23

    Rails 4电子邮件在生产中的预览

  24. 24

    借助Sidekiq,Rails 4可以安排日程电子邮件

  25. 25

    Rails 4:如何防止已登录的用户在结帐时估算电子邮件?

  26. 26

    使用codeigniter向所有新闻通讯成员发送电子邮件

  27. 27

    使用codeigniter向所有新闻通讯成员发送电子邮件

  28. 28

    Rails 4-Yandex邮件未发送

  29. 29

    联系表格邮件在Rails 4

热门标签

归档