Отправка писем из Heroku с помощью планировщика (CRON) - PullRequest
1 голос
/ 06 января 2012

У меня есть приложение на 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 Ответ

3 голосов
/ 06 января 2012

Я полагаю, что причина, по которой ваш код не работает, заключается в том, что вы полагаетесь на запрос для определения домена для электронной почты, но если вы отправляете почту напрямую, у вас нетзапрос поиграть с ...

Поэтому попробуйте поместить это в свой блок конфигурации в соответствующем файле среды (например, config / production.rb)

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

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

...