#ruby-on-rails #ruby-on-rails-3 #devise
#ruby-on-rails #ruby-on-rails-3 #разработка
Вопрос:
Мы используем стандартную почтовую программу devise forgot password:
<p>Hello <%= @resource.email %>!</p>
<p>Someone has requested a link to change your password, and you can do this through the link below.</p>
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
На производстве это генерирует URL-адрес локального хоста для смены пароля:
http://localhost:3000/users/password/edit?reset_password_token=amqs2q9NcM1FerHKhmzV
Это странно, учитывая, что файл production.rb имеет наш домен:
config.action_mailer.default_url_options = { :host => 'mysite.com' }
Почему mysite.com не используется в URL-адресе? Идеи?
Спасибо
Ответ №1:
Я предполагаю, что config.action_mailer.default_url_options
это где-то перезаписывается. Есть ли у вас какой-либо файл, config/initializers
который влияет ActionMailer
на это?
Попробуйте запустить rails console
в своем рабочем окне и посмотрите, что
ActionMailer::Base.default_url_options[:host]
ВОЗВРАТ.
Комментарии:
1. Вы правы, он был перезаписан
""
на Heroku2. это помогло! Спасибо
3. Я полагаю, что Heroku использует сам HOST ENV var.
Ответ №2:
Моя проблема была в config/initializers/setup_mail.rb
Ответ №3:
Я исправил это, просто добавив port
config.action_mailer.default_url_options
, что Devise всегда говорит нам делать во время установки, но многие из нас игнорируют это.
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
это в development.rb
любом случае.
В рабочей среде значение порта будет переменной — $PORT
, потому что Heroku динамически генерирует порт.