使用Scheduler(CRON)从Heroku发送邮件

时间:2012-01-05 20:22:44

标签: ruby-on-rails-3.1 heroku cron actionmailer scheduler

我在Heroku(在Rails 3.1中)有我的应用程序。当我设置ActionMailer发送电子邮件时,我收到错误Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

我这样修复它(ApplicationController):

  before_filter :mailer_set_url_options

  def mailer_set_url_options
    ActionMailer::Base.default_url_options[:host] = request.host_with_port
  end

工作正常。但现在我需要每天午夜发送一封电子邮件,所以我将这一行放入 scheduler.rake 中的任务中:

Mailer.notif_invoice(@inv_user, @invoice.id).deliver

我收到了这个错误:

`Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true`

我想在Scheduler发送电子邮件的那一刻才收到此错误。

你能给我一个提示,如何解决它?

我尝试将此行添加到我的任务中:

  ActionMailer::Base.default_url_options[:host] = request.host_with_port

但是我收到了错误

rake aborted!
undefined local variable or method `request' for main:Object

1 个答案:

答案 0 :(得分:3)

我认为您的代码无法正常工作的原因在于您依赖请求来确定电子邮件的域名,但如果您直接发送邮件,则表示您没有请求玩...

因此,请尝试将其放入相应环境文件中的配置块中(例如config / production.rb)

config.action_mailer.default_url_options = { :host => 'your_domain' }
Rails.application.routes.default_url_options = config.action_mailer.default_url_options

您需要设置电子邮件需要链接回代码中某处的域,但这可以是环境变量或类似的,而不是依赖于请求的内容。