"Отсутствует хост для ссылки!"для разработки - PullRequest
12 голосов
/ 10 июля 2011

Я установил Devise, и кажется, что все останавливается, когда я пытаюсь создать учетную запись.

Полная ошибка:

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

У меня есть следующий код внутри блока development.rb. Я пробовал это с добавленной конфигурацией SMTP и без нее.

config.action_mailer.default_url_options = { :host => 'localhost' }  
config.action_mailer.delivery_method = :smtp
...

Я правильно определил host?

Ответы [ 4 ]

13 голосов
/ 10 июля 2011

Файлы в config / не загружаются автоматически при разработке.Если вы внесли изменения в этот файл, убедитесь, что вы перезапустили сервер Rails и все сеансы консоли Rails, чтобы изменения вступили в силу.

3 голосов
/ 29 мая 2012

Установка его динамически решила проблему.

  # application_controller.rb
  before_filter :mailer_set_url_options

  ...

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

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

2 голосов
/ 30 января 2018

Унаследуйте default_url_options вашего приложения от ActionMailer.

По умолчанию значение default_url_options, которое вы установили для config.action_mailer в файлах среды (development.rb, production.rb и т. Д.)не используйте в качестве default_url_options вашего Application в целом.

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {}

Итак, когда вы пытаетесь использовать все, что требует хоста и порта (например, url) вне почтовой программы,он не знает, что делать.

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

Чтобы решить эту проблему (и сохранить все как можно более СУХОЕ), вы можете автоматически использовать config.action_mailer.default_url_options как целоеApplication default_url_options.

Просто добавьте следующую строку в файл config/environment.rb (изменив MyApp на имя вашего приложения):

# Set the default host and port to be the same as Action Mailer.
MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

Это исправит вашпроблема и автоматически установите Application default_url_options на то же, что и config.action_mailer.default_url_options:

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
1 голос
/ 23 ноября 2017

Добавить в конец файла config/environment.rb строка:

Rails.application.routes.default_url_options[:host] = 'yourhost.com'

Это не только проблема в action_mailer, но и установка хоста по умолчанию для routes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...