RoR - автоматизированные процессы, которые отправляют электронные письма. - PullRequest
0 голосов
/ 25 января 2012

Мне нужно отправить несколько электронных писем из моего приложения RoR, и я хотел бы получить совет о том, как лучше всего это сделать.

Предыдущие вопросы (например, RoR - где разместить автоматизированный процесс ) помещают весь код в модель. Однако - поскольку я отправляю электронное письмо, мне нужно получить доступ к представлению электронной почты. Казалось бы, модель не лучшее место для этого.

Должен ли я поместить этот процесс в контроллер? Если да, то как лучше всего начать его с cronjob?

Ответы [ 2 ]

1 голос
/ 25 января 2012

В Rails 3 вы устанавливаете класс ActiveMailer в app / mailers /, помещаете шаблоны представлений в app / views /, и тогда вы можете правильно отправлять электронные письма после настройки вашей среды.

Чтобы получить доступ к вашей почтовой программе и выполнить отправку, вы можете настроить задачу Rake в lib / tasks / cron.rake, которая требует среды, например:

namespace :cron

  desc "Sends some emails"
  task :send_emails => [:environment] do 
    MailerName.some_email(:some_option => 'w00t').deliver
  end

end

Затем вы можете выполнить эту задачу,запуск сценария оболочки bash примерно так:

#!/bin/bash
export GEM_HOME=/usr/local/lib/ruby/gems/1.9.1/gems
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1
cd "/users/yourname/railsapp"
/usr/local/bin/rake cron:send_emails RAILS_ENV=production

Обратите внимание, что это будет загружать всю вашу среду при каждом запуске.Если вы делаете много электронных писем, вы можете обнаружить, что лучше использовать curl для периодического обращения к определенному URL на вашем сервере, чтобы вы использовали существующие серверные экземпляры Rails вместо того, чтобы раскручиватьновый на каждом запуске.

1 голос
/ 25 января 2012

Если вы используете rails 3.x, вы можете поместить их в приложение / почтовые программы. В противном случае вы можете использовать папку lib для этой цели.

Если функциональность огромна, вы можете разделить их на отдельные файлы и использовать следующую структуру каталогов:

lib/notifier/a.rb
lib/notifier/b.rb

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...