【问题标题】:RoR - Automated processes that send emails.RoR - 发送电子邮件的自动化流程。
【发布时间】:2012-01-26 04:04:04
【问题描述】:

我需要从我的 RoR 应用程序中发送一些电子邮件,并希望得到一些关于如何最好地做到这一点的建议。

之前的问题(例如RoR - where to put a automated process)将所有代码放在模型中。但是 - 因为我要发送电子邮件,所以我将不得不访问电子邮件视图。看起来模型不是最好的地方。

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

【问题讨论】:

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


    【解决方案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 定期访问服务器上的特定 url 效果更好,这样您就可以使用现有的服务器 Rails 实例而不是启动每次运行一个新的。

    【讨论】:

      【解决方案2】:

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

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

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

      等等

      【讨论】:

      • 如果我将它们放入应用程序/邮件程序中,我在哪里放置电子邮件查看文件。目前这些位于views\classname 文件夹中。这会在主 Rails 应用程序之外工作吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2013-08-22
      • 2015-10-16
      • 1970-01-01
      • 2013-10-31
      • 2014-01-15
      相关资源
      最近更新 更多