RoR - 发送电子邮件的自动化流程。

时间:2012-01-25 12:25:40

标签: ruby-on-rails ruby-on-rails-3 automation

我需要从我的RoR应用程序发送一些电子邮件,并希望就如何最好地执行此操作提供一些建议。

以前的问题(例如RoR - where to put a automated process)将所有代码放在模型中。但是 - 因为我发送了一封电子邮件,我将不得不访问电子邮件View。看起来这个模型并不是最好的选择。

我应该将此过程放在控制器中吗?如果是这样,从cronjob启动它的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

如果您使用的是rails 3.x,则可以将它们放在app / mailers中。否则,您可以使用lib文件夹来实现此目的。

如果功能很大,您可以将它们拆分为单独的文件并使用以下目录结构:

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

等等

答案 1 :(得分:1)

在Rails 3中,您在app / mailers /中设置了一个ActiveMailer类,将视图模板放在app / views /中,然后您可以在设置环境后正确发送电子邮件。

要访问您的邮件程序并实际执行发送,您可以在lib / tasks / cron.rake中设置需要环境的Rake任务,如下所示:

namespace :cron

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

end

然后你可以通过运行bash shell脚本来执行这个rake任务:

#!/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定期点击服务器上的特定网址会更好,这样您就可以使用现有服务器Rails实例而不是每次运行时都会启动一个新的。