Ответ 1
Файлы в config/не будут автоматически перезагружены в процессе разработки. Если вы внесли изменения в этот файл, убедитесь, что вы перезапустили сервер Rails и все сеансы консоли Rails, чтобы изменения вступили в силу.
Я установил 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
?
Файлы в config/не будут автоматически перезагружены в процессе разработки. Если вы внесли изменения в этот файл, убедитесь, что вы перезапустили сервер Rails и все сеансы консоли Rails, чтобы изменения вступили в силу.
Настройка динамического решения проблемы.
# 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
.
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"}