"Отсутствует хост для ссылки!" для разработки
Я установил 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 ответа
Файлы в config/ не перезагружаются автоматически при разработке. Если вы внесли изменения в этот файл, убедитесь, что вы перезапустили сервер Rails и все сеансы консоли Rails, чтобы изменения вступили в силу.
Унаследовать ваше приложение 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
"s 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
"s 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"}
Установка его динамически решила проблему.
# 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
Я понимаю, что эта конфигурация не входит в состав контроллера по соглашению, но для целей разработки ее, кажется, достаточно. Я всегда могу закодировать его в конфигурацию производственной среды.
Добавить в конец файлаconfig/environment.rb
линия:
Rails.application.routes.default_url_options[:host] = 'yourhost.com'
Это не только проблема в action_mailer
, но также установка хоста по умолчанию для routes
также.