1

私はworkersとdelayed_jobに関するドキュメントを読みましたが、正確には従うことができませんでした.

メールを1つずつ送信するために使用するコントローラーがあります。毎日、その日にどのメールを送信する必要があるかを確認し、heroku を介してdelayed_job として送信したいと考えています。

これにどのように取り組み始めますか?ありがとう。

これは私が答えに基づいて考えているものです:

「いつでも」gemを使用して、次のschedule.rbを作成しました

  every 1.day, :at => '4:30 am' do

    heroku = Heroku::Client.new(ENV['HEROKU_USER'], ENV['HEROKU_PASS'])
    heroku.set_workers(ENV['HEROKU_APP'], 1)

    Contact.all.each do |contact|
      contact_email = contact.email_today

      unless contact.email_today == "none"
        puts contact.first_name
        puts contact_email.days
        puts contact.date_entered

        Delayed::Job.enqueue OutboundMailer.deliver_campaign_email(contact,contact_email)
      end

    end

    heroku.set_workers(ENV['HEROKU_APP'], 0)
  end

今日メールを送信するかどうかを判断するために、contact.rb のメソッドを作成しました。

  def email_today

    next_event_info = self.next_event_info # invokes method for contact

    next_event = next_event_info[:event]
    delay = next_event_info[:delay]

    if next_event.class.name == "Email" && from_today(self, next_event.days) + delay < 0 #helper from_today
      return next_event      
    else
      return "none"
    end

  end

これは正しく見えますか?私はWindowsで開発し、herokuにデプロイしているので、テストする方法がわかりません...ありがとう!

4

1 に答える 1

3

1日に1回メールを送信する場合は、まずcronアドオンをアプリケーションに追加することをお勧めします。これにより、1日に1回rakeタスクが実行されます。

もちろん、delayed_jobプラグイン(http://docs.heroku.com/delayed-job)も追加する必要があります。さらに、アプリは少なくとも1人のワーカーを実行している必要があります。

次に、cronrakeタスク内からメール作業を行うだけです。たとえば、「UserMailer」というメーラーがある場合、cronは次のようになります。

#lib/cron.rb
task :cron => :environment do
  User.all.each do |user|
    Delayed::Job.enqueue UserMailer.deliver_notification(user)
  end
end

これらのメールを送信するためにバックグラウンドタスクのみを使用している場合は、cronタスクにロジックを追加し、必要に応じてワーカーを追加および削除するメーラーメソッドを追加することもできます。これにより、ワーカーの料金を支払う必要がなくなります。使用されていません。

于 2010-08-23T01:28:17.403 に答える