Ruby on rails 3.1 使用调度程序(CRON)从Heroku发送邮件

Ruby on rails 3.1 使用调度程序(CRON)从Heroku发送邮件,ruby-on-rails-3.1,heroku,cron,actionmailer,scheduler,Ruby On Rails 3.1,Heroku,Cron,Actionmailer,Scheduler,我在Heroku有我的应用程序(在Rails 3.1中)。当我设置ActionMailer以发送电子邮件时,我得到了错误缺少要链接的主机!请提供:host参数,设置默认的\u url\u选项[:host],或将:only\u path设置为true 我这样修复了它(ApplicationController): 它很好用。但是现在我需要每天午夜发送几封电子邮件,所以我把这一行放到调度程序的任务中。rake: Mailer.notif_invoice(@inv_user, @invoice.id)

我在Heroku有我的应用程序(在Rails 3.1中)。当我设置ActionMailer以发送电子邮件时,我得到了错误
缺少要链接的主机!请提供:host参数,设置默认的\u url\u选项[:host],或将:only\u path设置为true

我这样修复了它(ApplicationController):

它很好用。但是现在我需要每天午夜发送几封电子邮件,所以我把这一行放到调度程序的任务中。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`
当我想通过
调度程序发送电子邮件时,我只是在一瞬间收到了这个错误

你能给我一些建议,如何修理它吗

我试图将这一行添加到我的任务中:

  ActionMailer::Base.default_url_options[:host] = request.host_with_port
但是我弄错了

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

我相信你的代码不起作用的原因在于你依赖请求来找出电子邮件的域,但是如果你直接发送邮件,你就没有一个请求可以处理

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

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

rake aborted!
undefined local variable or method `request' for main:Object
config.action_mailer.default_url_options = { :host => 'your_domain' }
Rails.application.routes.default_url_options = config.action_mailer.default_url_options