Разработка забытого пароля создает связь с локальным хостом в продукте?

#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. Вы правы, он был перезаписан "" на Heroku

2. это помогло! Спасибо

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 динамически генерирует порт.