Devise Confirmable продолжает отправлять localhost:3000 в производственном режиме

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

http://localhost:3000/users/confirmation?confirmation_token=E2jH_ehmHwqy2zyvJGcs

Если я заменю localhost:3000 на имя моего приложения, все работает.

В моем файле config/environment /production.rb у меня есть следующий код:

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true 

config.action_mailer.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "gmail.com",
  :user_name => ENV["GMAIL_USERNAME"],
  :password => ENV["GMAIL_PASSWORD"],
  :authentication => :plain,
  :enable_starttls_auto => true 
}
config.action_mailer.default_url_options = { :host => 'http://myapp.herokuapp.com' }

И в моем развитии я имею:

config.action_mailer.raise_delivery_errors = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true 
config.action_mailer.default_url_options = { :host => 'http://localhost:3000' }
config.action_mailer.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "gmail.com",
  :user_name => ENV["GMAIL_USERNAME"],
  :password => ENV["GMAIL_PASSWORD"],
  :authentication => :plain,
  :enable_starttls_auto => true 
}

Есть мысли о том, что делать? Я не мог найти прямой ответ нигде.

Я использую рельсы 4 и Devise 3.2.4

3 ответа

Решение

Значение хоста перезаписывается где-то в вашем приложении. Хорошее место для начала - ваш каталог инициализаторов. Как упоминалось в другом месте, проверьте setup_mail.rb под инициализаторами.

Перейдите в консоль Rails и проверьте вывод:

ActionMailer::Base.default_url_options[:host]

Попробуй это.

config.action_mailer.default_url_options = { host => 'your.herokuapp.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "gmail.com",
  Authentication: "plain",
  enable_starttls_auto: true,
  user_name: your_username,
  password: your_password
}
config.action_mailer.perform_deliveries = true

В production.rb добавлять default_url_options строка перед настройками smtp, а также host не должен содержать http://, только напишите домен, т.е. myapp.herokuapp.com

config.action_mailer.default_url_options = { :host => 'myapp.herokuapp.com' }
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => ENV["GMAIL_USERNAME"],
:password => ENV["GMAIL_PASSWORD"],
:authentication => :plain,
:enable_starttls_auto => true 
}
Другие вопросы по тегам